Libraries

library(ggplot2)
Use
suppressPackageStartupMessages()
to eliminate package startup
messages
library(dplyr)

Attaching package: ‘dplyr’

The following object is masked _by_ ‘.GlobalEnv’:

    storms

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal,
    union
library(scales)
library(Amelia)
Loading required package: Rcpp
## 
## Amelia II: Multiple Imputation
## (Version 1.7.6, built: 2019-11-24)
## Copyright (C) 2005-2021 James Honaker, Gary King and Matthew Blackwell
## Refer to http://gking.harvard.edu/amelia/ for more information
## 
library(lubridate)

Attaching package: ‘lubridate’

The following objects are masked from ‘package:base’:

    date, intersect, setdiff,
    union
library(xts)
Loading required package: zoo

Attaching package: ‘zoo’

The following objects are masked from ‘package:base’:

    as.Date, as.Date.numeric


Attaching package: ‘xts’

The following objects are masked from ‘package:dplyr’:

    first, last
library(openair)
library(tidyr)
library(gganimate)
No renderer backend detected. gganimate will default to writing frames to separate files
Consider installing:
- the `gifski` package for gif output
- the `av` package for video output
and restarting the R session

Matching the bouy data to the other data collected

hilo <- hbb_wku_h_xts
hilo <- data.frame(date=index(hilo), coredata(hilo))
hilo <- hilo[529:54816,]
hilo
# which(hilo$date=="2010-10-23 00:00:00") = index 529 

# which(hilo$date=="2016-12-31 23:00:00") = index 54816
length(hilo[,1]) # we are left with 54288 lines of data
[1] 54288
54816 - length(hilo[,1]) # we lost 528 values 
[1] 528

Changing column names

# removing columns that we are not using 
hilo$date.2 <- NULL # another date column
hilo$date.1 <- NULL # another date column
hilo$BGARFU <- NULL # ?
hilo$cfs <- NULL
hilo$DOmgL <- NULL # dissolved oxygen
#hilo$Doper <- NULL # dissolved oxygen
hilo$PAR1 <- NULL # ?
hilo$pH <- NULL # pH
hilo$NTU <- NULL # a different measurement for turbitity
hilo$DOper10 <- NULL # dissolved oxygen

# colnames(hilo) <- c("Date", "cfs", "RiverFlow-cumec", "LogRiverFlow-cumec", "Chlorophyll-RFU", "Salinity-PPT", "Temp-C", "chlorophyll-calibrator", "Turbidity-NTU")
# does not work ???

hilo

====================================================

FULL DATA SET 2012-2016

Descriptives: PLots

River Flow FULL DATA SET

length(hilo$logcms[which(is.na(hilo$logcms)==TRUE)]) # 12 NAs 
[1] 12
which(is.na(hilo$logcms)==TRUE)
 [1] 50509 50510 50511 50512 50513
 [6] 50514 50515 50516 50517 50518
[11] 50519 50520
RiverFlow <- ggplot(hilo,  aes(x = date, y = as.numeric(cms))) + 
  geom_line()

print(RiverFlow + ggtitle("River Flow")+labs(x="Time", y = "River Flow - cubic meters per second"))

CHL FULL DATA SET

length(hilo$ChlRFU[which(is.na(hilo$ChlRFU)==TRUE)]) # 20464 NAs
[1] 20464
which(as.numeric(hilo$ChlRFU)==max(as.numeric(na.omit(hilo$ChlRFU)))) # 15.3 max 
[1] 38974
# CHL tells us where in the data set this happened  
hilo[38974,]

CHL <- ggplot(hilo,  aes(x = date, y = as.numeric(ChlRFU))) + 
  geom_line()

print(CHL + ggtitle("Chlorophyll ")+labs(x="Time", y = "Chlorophyll  - relative fluorescence units (RFU)"))

Turbity FULL DATA SET

length(hilo$Corr.NTU[which(is.na(hilo$Corr.NTU)==TRUE)]) #15012 NAs
[1] 15012
which(as.numeric(hilo$Corr.NTU)==max(as.numeric(na.omit(hilo$Corr.NTU)))) # 88.4
[1] 33243
# tells us where in the data set this happened
hilo[33243,]

TURB <- ggplot(hilo,aes(x = date, y = as.numeric(Corr.NTU))) + 
  geom_line()

print(TURB + ggtitle("Turbidity ")+labs(x="Time", y = "Turbidity - Nephelometric Turbidity Units (NTU)"))

Salinity FULL DATA SET

length(hilo$saltppt[which(is.na(hilo$saltppt)==TRUE)]) #11330 NAs
[1] 11330
SALT <- ggplot(hilo,  aes(x = date, y = as.numeric(saltppt))) + 
  geom_line()

print(SALT + ggtitle("Salinity")+labs(x="Time", y = "Salinity - unit parts per thousand (PPT)"))

======================================================== # Histograms FULL DATA SET ## River Flow Histogram

hist(as.numeric(hilo$logcms), main = "Histogram of Log River Flow", xlab = "Log River Flow")


# this looks okay

CHL Histogram

# VERY skewed
hist(as.numeric(hilo$ChlRFU), main = "Histogram of Chlorophyll", xlab = "Chlorophyll  - relative fluorescence units (RFU)")


# this looks better
hist(log(as.numeric(hilo$ChlRFU)), main = "Histogram of Log Chlorophyll", xlab = "Chlorophyll")
NaNs produced

# not sure what happens to units when taking the log 

Turbity Histogram

# VERY skewed
hist(as.numeric(hilo$Corr.NTU), main = "Histogram of Turbidity", xlab = "Turbidity - Nephelometric Turbidity Units (NTU)")


# this looks better
hist(log(as.numeric(hilo$Corr.NTU)), main = "Histogram of Log Turbidity", xlab = "Turbidity")

# not sure what happens to units when taking the log 

Salinity Histogram

# skewed
hist(as.numeric(hilo$saltppt), main = "Histogram of Salinity", xlab = "Salinity - unit parts per thousand (PPT)")


# this is worst!
hist(log(as.numeric(hilo$saltppt)), main = "Histogram of Log Salinity", xlab = "Salinity")

# not sure what happens to units when taking the log 

========================================================= # NEW DATA SET-Modified Data 2013-2015

# start date: 2013-01-01 00:00:00
# end date: 2015-12-31 23:00:00
hilomodified <- hilo[19225:45504,]
length(hilo[,1])-length(hilomodified[,1])
[1] 28008
# lost 28008 entries of data 

length(hilomodified[,1])-528 # we are left with 25752 entries of data 
[1] 25752
head(hilomodified)
tail(hilomodified)
NA

Descriptives on all variables MODIFIED DATA SET: Using Favstats

River Flow Favstats

library(mosaic)
Registered S3 methods overwritten by 'htmltools':
  method               from         
  print.html           tools:rstudio
  print.shiny.tag      tools:rstudio
  print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
Registered S3 method overwritten by 'mosaic':
  method                           from   
  fortify.SpatialPolygonsDataFrame ggplot2

The 'mosaic' package masks several functions from core packages in order to add 
additional features.  The original behavior of these functions should not be affected by this.

Attaching package: ‘mosaic’

The following object is masked from ‘package:Matrix’:

    mean

The following object is masked from ‘package:scales’:

    rescale

The following objects are masked from ‘package:dplyr’:

    count, do, tally

The following object is masked from ‘package:ggplot2’:

    stat

The following objects are masked from ‘package:stats’:

    binom.test, cor, cor.test,
    cov, fivenum, IQR, median,
    prop.test, quantile, sd,
    t.test, var

The following objects are masked from ‘package:base’:

    max, mean, min, prod, range,
    sample, sum
favstats(hilomodified$cms)
Auto-converting character to numeric.

CHL Favstats

favstats(hilomodified$ChlRFU)
Auto-converting character to numeric.

Turbitity Favstats

favstats(hilomodified$Corr.NTU)
Auto-converting character to numeric.

Salinity Favstats

favstats(hilomodified$saltppt)
Auto-converting character to numeric.
favstats(hilomodified$TempC)
Auto-converting character to numeric.
favstats(hilomodified$Doper)
Auto-converting character to numeric.

===================================================== # MODIFIED DATA SET 2013-2015 # Descriptives: Plots

River Flow MODIFIED

length(hilomodified$logcms[which(is.na(hilomodified$logcms)==TRUE)]) # No NAs, YAY!
[1] 0
which(is.na(hilomodified$logcms)==TRUE)
integer(0)
RiverFlowMod <- ggplot(hilomodified,  aes(x = date, y = as.numeric(cms))) + 
  geom_line()

print(RiverFlowMod + ggtitle("River Flow")+labs(x="Time", y = "River Flow - cubic meters per second"))

CHL MODIFIED

sum(is.na(hilomodified$ChlRFU)==TRUE) # 1884 NAs
[1] 1884
#which(is.na(hilomodified$ChlRFU)==TRUE)
# max(as.numeric(na.omit(hilo$ChlRFU))) # 15.3
which(as.numeric(hilomodified$ChlRFU)==15.3)
[1] 19750
hilo[38974,]

CHLMod <- ggplot(hilomodified,  aes(x = date, y = as.numeric(ChlRFU))) + 
  geom_line()

print(CHLMod + ggtitle("Chlorophyll ")+labs(x="Time", y = "Chlorophyll  - relative fluorescence units (RFU)"))

Turbitity MODIFIED

length(hilomodified$Corr.NTU[which(is.na(hilomodified$Corr.NTU)==TRUE)]) # 2704 NAs
[1] 2704
# max(as.numeric(na.omit(hilo$Corr.NTU))) # 88.4
which(as.numeric(hilo$Corr.NTU)==88.4)
[1] 33243
hilo[33243,]

TURBMod <- ggplot(hilomodified,  aes(x = date, y = as.numeric(Corr.NTU))) + 
  geom_line()

print(TURBMod + ggtitle("Turbidity ")+labs(x="Time", y = "Turbidity - Nephelometric Turbidity Units (NTU)"))

Salinity MODIFIED

length(hilomodified$saltppt[which(is.na(hilomodified$saltppt)==TRUE)]) # 2267 NAs
[1] 2267
SALTMod <- ggplot(hilomodified,  aes(x = date, y = as.numeric(saltppt))) + 
  geom_line()

print(SALTMod + ggtitle("Salinity")+labs(x="Time", y = "Salinity - unit parts per thousand (PPT)"))

Tempurature MODIFIED

length(hilomodified$TempC[which(is.na(hilomodified$TempC)==TRUE)]) # 2267 NAs
[1] 1702
TempMod <- ggplot(hilomodified,  aes(x = date, y = as.numeric(TempC))) + 
  geom_line()

print(TempMod + ggtitle("Temperature")+labs(x="Time", y = "Temperature - Celsius"))

Dissolved Oxygen MODIFIED

length(hilomodified$Doper[which(is.na(hilomodified$Doper)==TRUE)]) # 2267 NAs

TempMod <- ggplot(hilomodified,  aes(x = date, y = as.numeric(Doper))) + 
  geom_line()

print(TempMod + ggtitle("Dissolved Oxygen")+labs(x="Time", y = "Dissolved Oxygen in percent of saturation"))

=================================================== # Histograms MODIFIED

River Flow MODIFIED

hist(as.numeric(hilomodified$cms), main = "Histogram of Log River Flow", xlab = "Log River Flow", breaks =90, xlim = c(0,100))


# this looks okay

CHL MODIFIED

# VERY skewed
hist(as.numeric(hilomodified$ChlRFU), main = "Histogram of Chlorophyll", xlab = "Chlorophyll  - relative fluorescence units (RFU)")


# this looks better
hist(log(as.numeric(hilomodified$ChlRFU)), main = "Histogram of Log Chlorophyll", xlab = "Chlorophyll")
NaNs produced

# not sure what happens to units when taking the log 

Turbitity MODIFIED

# VERY skewed
hist(as.numeric(hilomodified$Corr.NTU), main = "Histogram of Turbidity", xlab = "Turbidity - Nephelometric Turbidity Units (NTU)")


# this looks better
hist(log(as.numeric(hilomodified$Corr.NTU)), main = "Histogram of Log Turbidity", xlab = "Turbidity")

# not sure what happens to units when taking the log 

Salinity MODIFIED

# skewed
hist(as.numeric(hilomodified$saltppt), main = "Histogram of Salinity", xlab = "Salinity - unit parts per thousand (PPT)")

# this is worst!
hist(log(as.numeric(hilomodified$saltppt)), main = "Histogram of Log Salinity", xlab = "Salinity")
# not sure what happens to units when taking the log 

=============================================================

Plot with ALL Var 2013-2015

It is hard to see what is going on

AllYears <- ggplot(hilomodified,  aes(x = date, y = as.numeric(logcms))) + 
  geom_line()+
  geom_line(aes(y = as.numeric(saltppt)), color = "darkred") +
  geom_line(aes(y = as.numeric(Corr.NTU)), color="darkgreen") +
  geom_line(aes(y=as.numeric(ChlRFU)),color="blue")

print(AllYears + ggtitle("Hilo Bay")+labs(x="Time", y = "River Flow - cubic meters per second"))

============================================================== # Descriptives by Storm We are picking one storm from each year. We can indicate a storm has occurred by the extreme events in the river flow data. We will not use the log (which is logbase10) in order to see the extreme events When salinity is below 35 this also indicates a storm has occurred.

We will break the data set by year to find the most extreme event for each year.

hilo2013 <- hilomodified[1:8760,]

hilo2014 <- hilomodified[8761:17520,]

hilo2015 <- hilomodified[17521:length(hilomodified[,1]),]

2013 Data & Plot

# max(as.numeric(hilo2013$logcms)) # this is log base 10 
# This is NOT the natural log
max(as.numeric(hilo2013$cms)) # 207.186 
[1] 207.186
which(as.numeric(hilo2013$cms) == max(as.numeric(hilo2013$cms)))
[1] 3550
hilo2013[3550,]
# all values for this storm are NA

plot2013 <- ggplot(hilo2013,  aes(x = date, y = as.numeric(cms))) + 
  geom_line(color="black")+
  geom_line(aes(y = as.numeric(saltppt)), color = "darkred") +
  geom_line(aes(y = as.numeric(Corr.NTU)), color="darkgreen") +
  geom_line(aes(y=as.numeric(ChlRFU)),color="blue")

print(plot2013 + ggtitle("2013")+labs(x="Time", y = "River Flow - cubic meters per second"))

Split 2013 into 6 months to get a better visual

# R2013.1 <- ggplot(hilo2013[1:(length(hilo2013[,1])/2),],  aes(x = date, y = as.numeric(cms))) + 
#   geom_line(color="black")+
#   geom_line(aes(y = as.numeric(saltppt)), color = "darkred") +
#   geom_line(aes(y = as.numeric(Corr.NTU)), color="darkgreen") +
#   geom_line(aes(y=as.numeric(ChlRFU)),color="blue")
# print(R2013.1 + ggtitle("River Flow")+labs(x="Time", y = "River Flow - cubic meters per second"))
# R2013.1+ylim(0,40)
# 
# 
# R2013.2 <- ggplot(hilo2013[(length(hilo2013[,1])/2):length(hilo2013[,1]),],  aes(x = date, y = as.numeric(cms))) + 
#   geom_line(color="black")+
#   geom_line(aes(y = as.numeric(saltppt)), color = "darkred") +
#   geom_line(aes(y = as.numeric(Corr.NTU)), color="darkgreen") +
#   geom_line(aes(y=as.numeric(ChlRFU)),color="blue")
# print(R2013.2 + ggtitle("River Flow")+labs(x="Time", y = "River Flow - cubic meters per second"))
# R2013.2+ylim(0,40)

2014 Data & Plot

# Max river flow in the overall data set
max(as.numeric(hilo2014$cms))
[1] 472.4939
max(as.numeric(hilomodified$cms))
[1] 472.4939
which(as.numeric(hilo2014$cms) == max(as.numeric(hilo2014$cms)))
[1] 5263
hilo2014[5263,]

R2014 <- ggplot(hilo2014,  aes(x = date, y = as.numeric(logcms))) + 
  geom_line(color="black")+
  geom_line(aes(y = as.numeric(saltppt)), color = "darkred") +
  geom_line(aes(y = as.numeric(Corr.NTU)), color="darkgreen") +
  geom_line(aes(y=as.numeric(ChlRFU)),color="blue")

print(R2014 + ggtitle("2014")+labs(x="Time", y = "River Flow - cubic meters per second"))

2015 Data & Plot

max(as.numeric(hilo2015$cms))
[1] 232.2449
which(as.numeric(hilo2015$cms) == max(as.numeric(hilo2015$cms)))
[1] 6475
hilo2015[6475,]

R2015 <- ggplot(hilo2015,  aes(x = date, y = as.numeric(logcms))) + 
  geom_line(color="black")+
  geom_line(aes(y = as.numeric(saltppt)), color = "darkred") +
  geom_line(aes(y = as.numeric(Corr.NTU)), color="darkgreen") +
  geom_line(aes(y=as.numeric(ChlRFU)),color="blue")

print(R2015 + ggtitle("2015")+labs(x="Time", y = "River Flow - cubic meters per second"))

# Separating the Data by Storm Events

Separating the Data by Storm

outcomes <- as.numeric(hilomodified$saltppt)<25 
index.lt25 <- which(outcomes==TRUE)

poss.storms <- hilomodified[index.lt25,]
poss.storms
outcomes.35 <- as.numeric(hilomodified$saltppt)<35 
index.lt35 <- which(outcomes==TRUE)
index.lt25
   [1]   159   160   161   162   163
   [6]   164   209   210   213   218
  [11]   225   227   228   230   231
  [16]   232   234   759   765   766
  [21]   815   816   894   895   899
  [26]   900   901   902   903   904
  [31]   905   906   907   908  1112
  [36]  1113  1114  1115  1116  1117
  [41]  1118  1119  1120  1121  1122
  [46]  1123  1124  1125  1126  1131
  [51]  1132  1133  1134  1135  1136
  [56]  1137  1138  1139  1140  1141
  [61]  1142  1143  1144  1145  1146
  [66]  1147  1148  1149  1150  1151
  [71]  1152  1153  1154  1155  1156
  [76]  1157  1158  1159  1160  1161
  [81]  1162  1163  1164  1165  1166
  [86]  1167  1168  1169  1170  1171
  [91]  1172  1173  1174  1175  1176
  [96]  1177  1178  1179  1180  1181
 [101]  1182  1183  1184  1185  1186
 [106]  1187  1188  1189  1190  1191
 [111]  1192  1193  1194  1195  1196
 [116]  1197  1198  1200  1201  1202
 [121]  1204  1205  1206  1207  1208
 [126]  1209  1210  1211  1212  1213
 [131]  1214  1215  1216  1217  1218
 [136]  1219  1220  1221  1222  1223
 [141]  1224  1225  1226  1227  1228
 [146]  1229  1230  1231  1232  1233
 [151]  1234  1235  1236  1237  1238
 [156]  1239  1240  1241  1242  1243
 [161]  1244  1245  1246  1247  1248
 [166]  1249  1250  1251  1252  1253
 [171]  1254  1255  1256  1257  1258
 [176]  1259  1260  1261  1262  1263
 [181]  1264  1265  1266  1267  1268
 [186]  1269  1270  1271  1272  1273
 [191]  1274  1275  1276  1277  1278
 [196]  1279  1283  1284  1285  1286
 [201]  1288  1289  1293  1294  1295
 [206]  1296  1297  1298  1299  1300
 [211]  1301  1302  1303  1304  1305
 [216]  1306  1307  1308  1309  1310
 [221]  1311  1312  1313  1314  1315
 [226]  1316  1317  1318  1319  1320
 [231]  1321  1322  1323  1324  1325
 [236]  1326  1327  1328  1329  1330
 [241]  1331  1332  1333  1334  1335
 [246]  1336  1337  1338  1339  1340
 [251]  1341  1342  1343  1344  1345
 [256]  1346  1347  1348  1349  1350
 [261]  1351  1352  1353  1354  1355
 [266]  1356  1357  1358  1359  1360
 [271]  1361  1362  1363  1364  1365
 [276]  1366  1368  1369  1370  1371
 [281]  1372  1373  1374  1375  1376
 [286]  1377  1378  1379  1380  1381
 [291]  1382  1383  1384  1391  1392
 [296]  1393  1410  1411  1413  1414
 [301]  1415  1416  1417  1418  1419
 [306]  1420  1421  1424  1425  1427
 [311]  1428  1431  1432  1433  1434
 [316]  1435  1436  1437  1438  1439
 [321]  1440  1442  1443  1444  1445
 [326]  1446  1447  1450  1451  1452
 [331]  1453  1454  1458  1478  1479
 [336]  1480  1481  1482  1483  1484
 [341]  1490  1515  2137  3485  3487
 [346]  3488  3489  3490  3491  3492
 [351]  3495  3496  3497  3498  3499
 [356]  3500  3501  3502  3503  3508
 [361]  3509  3513  3518  3519  5312
 [366]  5313  5317  5318  5319  5320
 [371]  5321  5322  5323  5325  5326
 [376]  5327  5328  5329  5330  5331
 [381]  5332  5334  5335  5336  5337
 [386]  5338  5339  5340  5341  5342
 [391]  5343  5344  5345  5346  5347
 [396]  5348  5349  5350  5368  5474
 [401]  5475  5485  5486  5487  5488
 [406]  5489  5491  5492  5509  5756
 [411]  7545  8672  8673  8674  8675
 [416]  8676  8677  8678  8679  8680
 [421]  8681  8682  8683  8713  8714
 [426]  8715  8716  8717  8718  8719
 [431]  8720  8721  8722  8723  8724
 [436]  8725  8726  8727  8728  8729
 [441]  8730  8731  8732  8733  8734
 [446]  8735  8736  8737  8738  8739
 [451]  8740  8741  8742  8743  8744
 [456]  8745  8746  8747  8748  8749
 [461]  8750  8751  8752  8753  8754
 [466]  8755  8756  8757  8758  8759
 [471]  8760  8761  8762  8763  8764
 [476]  8765  8766  8767  8768  8769
 [481]  8770  8771  8772  8773  8774
 [486]  8775  8776  8835  8836  8837
 [491]  8839  8840  8841  8842  8843
 [496]  8844  8845  8846  8847  8848
 [501]  8849  8855  8856  8857  8858
 [506]  8859  8862  8863  8864  8865
 [511]  8876  8927  8932  8933  8945
 [516] 10394 10395 10396 10397 10398
 [521] 10399 10400 10401 10402 10403
 [526] 10404 10405 10406 10407 10408
 [531] 10410 10411 10413 10414 10421
 [536] 10422 10425 10427 10428 10429
 [541] 10430 10431 10432 10433 10434
 [546] 10435 10436 10437 10438 10441
 [551] 10442 10443 10444 10445 10446
 [556] 10450 10538 10539 10540 10541
 [561] 10544 10545 10546 10547 10552
 [566] 10553 10554 10555 10556 10557
 [571] 10558 10559 10570 10644 10647
 [576] 10652 10656 10657 10659 10664
 [581] 10665 10666 10667 10668 10669
 [586] 10670 10671 10672 10673 10674
 [591] 10675 10676 10677 10678 10679
 [596] 10680 10681 10682 10683 10684
 [601] 10685 10686 10687 10688 10689
 [606] 10690 10691 10692 10693 10694
 [611] 10695 10696 10697 10698 10699
 [616] 10700 10701 10702 10703 10704
 [621] 10705 10706 10707 10708 10709
 [626] 10710 10711 10712 10713 10714
 [631] 10715 10716 10717 10718 10719
 [636] 10720 10721 10722 10723 10724
 [641] 10725 10726 10727 10728 10729
 [646] 10730 10731 10732 10733 10734
 [651] 10735 10736 10737 10738 10739
 [656] 10740 10741 10742 10743 10744
 [661] 10745 10746 10747 10748 10749
 [666] 10750 10751 10752 10753 10754
 [671] 10755 10756 10757 10758 10759
 [676] 10760 10761 10762 10763 10764
 [681] 10765 10766 10767 10768 10769
 [686] 10770 10771 10772 10773 10774
 [691] 10775 10776 10777 10778 10779
 [696] 10780 10781 10782 10783 10784
 [701] 10785 10786 10787 10788 10789
 [706] 10790 10791 10792 10793 10794
 [711] 10795 10796 10797 10798 10799
 [716] 10800 10801 10802 10803 10804
 [721] 10805 10806 10807 10808 10809
 [726] 10810 10811 10812 10813 10814
 [731] 10815 10816 10817 10818 10819
 [736] 10820 10830 10831 10832 10833
 [741] 10919 10920 10921 10922 10923
 [746] 10924 10925 10926 10927 10928
 [751] 10929 10930 10931 10932 10933
 [756] 10934 10935 10936 10937 10938
 [761] 10939 10940 10941 10942 10943
 [766] 10944 10945 10946 10947 10948
 [771] 10949 10950 10951 10952 10953
 [776] 10954 10955 10956 10957 10958
 [781] 10959 10960 10964 10965 10966
 [786] 10967 10968 10969 10970 10971
 [791] 10972 10973 10974 10975 10976
 [796] 10977 10978 10979 10980 10981
 [801] 10982 10983 10984 10985 10986
 [806] 10987 10988 10989 10990 10991
 [811] 10992 10993 10994 10995 10997
 [816] 10998 11000 11001 11002 11003
 [821] 11004 11005 11006 11007 11008
 [826] 11009 11010 11011 11012 11019
 [831] 11020 11021 11022 11023 11024
 [836] 11025 11026 11027 11028 11030
 [841] 11031 11032 11033 11065 11077
 [846] 11086 11093 11094 11095 11096
 [851] 11097 11098 11099 11100 11101
 [856] 11102 11103 11104 11105 11106
 [861] 11107 11108 11109 11110 11111
 [866] 11112 11113 11114 11115 11116
 [871] 11117 11118 11119 11120 11122
 [876] 11123 11124 11125 11126 11127
 [881] 11128 11129 11130 11131 11132
 [886] 11133 11134 11135 11136 11139
 [891] 11140 11149 11150 11151 11204
 [896] 11205 11210 11211 11212 11213
 [901] 11214 11215 11216 11217 11218
 [906] 11219 11220 11221 11222 11223
 [911] 11224 11225 11226 11227 11228
 [916] 11229 11230 11231 11232 11233
 [921] 11234 11235 11236 11237 11238
 [926] 11239 11240 11241 11242 11243
 [931] 11244 11245 11246 11247 11248
 [936] 11249 11250 11251 11252 11253
 [941] 11254 11255 11256 11257 11258
 [946] 11259 11260 11261 11262 11263
 [951] 11264 11265 11266 11267 11268
 [956] 11269 11270 11271 11272 11273
 [961] 11274 11275 11276 11277 11278
 [966] 11279 11280 11281 11282 11283
 [971] 11284 11285 11286 11287 11288
 [976] 11289 11290 11291 11292 11293
 [981] 11294 11295 11296 11297 11298
 [986] 11299 11300 11301 11302 11303
 [991] 11304 11305 11306 11307 11308
 [996] 11309 11310 11311 11312 11313
 [ reached getOption("max.print") -- omitted 2851 entries ]
poss.storms35 <- hilomodified[index.lt25,]
poss.storms35

hilomodified$date[16]
[1] "2013-01-01 15:00:00 UTC"
storm.1.7.13 <- ggplot(hilomodified[145:168,],  aes(x = date, y = as.numeric(cms))) + 
  geom_line(color="black")+
  geom_line(aes(y = as.numeric(saltppt)), color = "lightsteelblue1") +
  geom_line(aes(y = as.numeric(Corr.NTU)), color="grey69") +
  geom_line(aes(y=as.numeric(ChlRFU)),color="khaki")

print(storm.1.7.13 + ggtitle("Storm 1/7/13")+labs(x="Time"))

Trying to make the Rainfall plot easier to read

RiverFlow1 <- ggplot(hilomodified[1:100,],  aes(x = date, y = as.numeric(cms))) + 
  geom_line()

print(RiverFlow + ggtitle("River Flow")+labs(x="Time", y = "River Flow - cubic meters per second"))

=======

getwd()
[1] "/Users/briannacirillo/Documents/GitHub/Hilo_Bay/HiloBay_MA321_Spring21"
# write.csv(hilomodified,file="HiloBayNEW13to15.csv", row.names = FALSE)

NEW Change in River Flow Column

# any value greater than or equal to 10 cms indicates a storm
pos.neg <- as.numeric(hilomodified$cms) - 10 

start <- vector()
end <- vector()

for(i in 1:length(pos.neg)){
  if(isTRUE(pos.neg[i] < 0 && pos.neg[i+1] > 0)){ 
    # if goes from + to - then this is the beginning of a storm
    start[i] <- i
  }else if(isTRUE(pos.neg[i] > 0 && pos.neg[i+1] < 0)){
    # if goes from - to + then this is the end of the storm
    end[i] <- i
    }
}
start<-start[!is.na(start)] # removing NA
start
 [1]   141   212   891  1097  1106
 [6]  3480  3499  3545  5309  7537
[11]  8713  8729 10388 10390 10411
[16] 10727 10737 10843 10917 11216
[21] 11340 11508 11646 12581 13406
[26] 13458 13551 13655 13866 14010
[31] 15233 15287 15722 16054 16727
[36] 19777 19802 19920 20066 20386
[41] 20622 20662 21143 21163 22249
[46] 22656 22762 22911 23008 23015
[51] 23060 23116 23201 23395 23640
[56] 23703 23740 23757 23774 23807
[61] 23947 24141 24312 24437 24938
[66] 25005 25246 25474 25492 25972
[71] 26107 26187
length(start) # make sure both start and end are the same length 
[1] 72
end<-end[!is.na(end)]
end
 [1]   162   226   903  1102  1398
 [6]  3495  3500  3572  5338  7547
[11]  8718  8765 10389 10404 10412
[16] 10732 10752 10845 11044 11232
[21] 11346 11525 11695 12596 13445
[26] 13514 13648 13670 13888 14111
[31] 15235 15288 15750 16148 16749
[36] 19790 19811 19938 20087 20394
[41] 20650 20719 21153 21169 22257
[46] 22675 22771 22972 23013 23020
[51] 23070 23130 23215 23403 23670
[56] 23719 23742 23761 23781 23899
[61] 24082 24168 24325 24510 24945
[66] 25233 25328 25482 25499 26093
[71] 26117 26214
length(end)
[1] 72
for(i in 1:length(start)){
  storm <- ggplot(hilomodified[(start[i]-24):(end[i]+24),],  aes(x = date, y = as.numeric(cms))) +
  geom_line(color="black")+
  geom_line(aes(y = as.numeric(Corr.NTU)), color="green") +
  geom_line(aes(y=as.numeric(ChlRFU)),color="blue") +
  geom_line(aes(y = as.numeric(saltppt)),color="red") +
  geom_line(aes(y = as.numeric(TempC)),color="purple") +
  geom_line(aes(y = as.numeric(Doper)),color="orange")

  print(storm + ggtitle("Storms")+labs(x="Time"))
}

ChangeRF <- function(x = vector()){
change <- c(0)
  for(i in 1:(length(x)-1)){
    change[i+1] <- x[i]-x[i+1]
  }
  return(change)
}
change.vector <- c(ChangeRF(as.numeric(hilomodified$cms)))
change.vector
   [1]   0.00000   0.02124   0.02832
   [4]   0.02124   0.02832   0.00708
   [7]   0.00000   0.02124   0.02124
  [10]   0.02832   0.01416   0.00000
  [13]   0.00708   0.00708   0.01416
  [16]   0.02124   0.00708   0.00708
  [19]   0.01416   0.03540   0.00000
  [22]   0.01416   0.00000   0.02832
  [25]   0.02124   0.02124   0.00000
  [28]   0.01416   0.01416   0.00000
  [31]   0.00000   0.00000   0.02832
  [34]  -0.00708   0.02124   0.00000
  [37]   0.01416   0.02124   0.00000
  [40]   0.02124   0.01416   0.00000
  [43]   0.00000   0.00708   0.00708
  [46]   0.00708   0.02832   0.00708
  [49]   0.00708   0.01416   0.00000
  [52]   0.00708   0.00000   0.00000
  [55]   0.02124   0.00000   0.01416
  [58]   0.02124  -0.01416   0.01416
  [61]   0.00000   0.00000   0.00708
  [64]   0.02124   0.00708   0.00708
  [67]   0.01416   0.00000   0.00000
  [70]   0.00708   0.02832   0.00708
  [73]   0.00708   0.00708   0.01416
  [76]   0.00000   0.00000  -0.01416
  [79]   0.01416   0.01416   0.00000
  [82]   0.00000   0.00000   0.00000
  [85]   0.00000  -0.00708  -0.02832
  [88]  -0.04248  -0.00708   0.00000
  [91]  -0.02124  -0.02832  -0.04248
  [94]  -0.02124  -0.01416  -0.02124
  [97]  -0.02124   0.01416   0.03540
 [100]   0.00708   0.00000   0.00708
 [103]   0.00708  -0.19116  -0.25488
 [106]  -0.29028  -0.16284   0.09204
 [109]  -0.33984  -0.44604   0.04956
 [112]   0.16284   0.12036  -0.11328
 [115]  -0.22656  -0.27612  -0.31152
 [118]  -1.13988  -1.58592   0.59472
 [121]   0.67968   0.49560   0.14160
 [124]   0.00708   0.21948   0.04248
 [127]  -0.41064  -0.95580  -0.45312
 [130]   0.32568   0.53100   0.54516
 [133]   0.56640   0.32568   0.29736
 [136]   0.06372  -0.45312  -0.82836
 [139]  -0.63720  -1.22484  -1.92576
 [142]  -2.30100  -2.73996  -1.72044
 [145]  -0.54516  -0.25488  -0.09912
 [148]  -0.43896  -1.32396  -1.54344
 [151]  -1.43724  -1.09032  -0.55224
 [154]  -0.10620   0.44604   0.92748
 [157]   1.83372   2.47092   2.03196
 [160]   1.81248   1.60008   1.35228
 [163]   1.06908   0.86376   0.75756
 [166]   0.66552   0.54516   0.43188
 [169]   0.43896   0.31860   0.26196
 [172]   0.24780   0.19116   0.16992
 [175]   0.09912   0.13452   0.04956
 [178]   0.09912   0.02124   0.04956
 [181]   0.02832   0.03540   0.00000
 [184]   0.05664   0.02124   0.02832
 [187]   0.02832   0.04248  -0.00708
 [190]   0.00708  -0.07788  -0.12036
 [193]  -0.04956  -0.16284  -0.12036
 [196]  -0.21240  -0.20532  -0.25488
 [199]  -0.80004   0.01416   0.05664
 [202]  -0.24780  -0.41064   0.06372
 [205]   0.24780   0.27612   0.22656
 [208]   0.24780   0.12036   0.02832
 [211]  -0.35400  -1.84080  -5.09760
 [214]  -6.35784 -10.52088  -4.71528
 [217]   3.39840   4.29756   3.27096
 [220]   2.61252   2.20188   1.98948
 [223]   1.67088   1.46556   1.35228
 [226]   1.20360   1.00536   0.80004
 [229]   0.75048   0.56640   0.51684
 [232]   0.40356   0.40356   0.34692
 [235]   0.24780   0.02124   0.00708
 [238]   0.14868   0.10620   0.19116
 [241]   0.14160   0.12036   0.11328
 [244]   0.09204   0.05664   0.03540
 [247]   0.05664   0.02124   0.06372
 [250]   0.07080   0.02124   0.02832
 [253]   0.04956   0.03540   0.04956
 [256]   0.02124   0.01416   0.04956
 [259]   0.04248   0.04248   0.02124
 [262]   0.04956   0.01416   0.03540
 [265]   0.02832   0.04248   0.03540
 [268]   0.02124   0.04956   0.03540
 [271]   0.00708   0.05664   0.04248
 [274]   0.02832   0.03540   0.03540
 [277]   0.04248   0.02832   0.02124
 [280]   0.02832   0.03540   0.03540
 [283]   0.03540   0.02124   0.05664
 [286]   0.01416  -0.04956  -0.18408
 [289]   0.14160   0.07788  -0.04956
 [292]  -0.09912  -0.19824  -0.23364
 [295]  -0.36108  -0.16284   0.06372
 [298]   0.14868   0.19116   0.18408
 [301]   0.14868   0.11328   0.08496
 [304]   0.05664   0.07080   0.04248
 [307]   0.02832   0.02832   0.02832
 [310]   0.05664   0.02832   0.00708
 [313]   0.04248   0.00708   0.02124
 [316]   0.02832   0.02832   0.02832
 [319]   0.01416   0.02832   0.01416
 [322]   0.01416   0.01416   0.02832
 [325]   0.01416   0.02124   0.01416
 [328]   0.00708   0.00000   0.03540
 [331]   0.01416   0.02124   0.02124
 [334]   0.01416   0.00708   0.01416
 [337]   0.00708   0.02832   0.01416
 [340]   0.02124   0.00000   0.00708
 [343]   0.00000   0.02832   0.01416
 [346]   0.02124  -0.00708   0.02832
 [349]  -0.00708   0.02124   0.00708
 [352]   0.00000   0.00000   0.02124
 [355]   0.00708   0.00708   0.01416
 [358]   0.00708   0.00708   0.02124
 [361]   0.00708   0.03540   0.00000
 [364]   0.00708   0.02124   0.01416
 [367]   0.00000   0.02124   0.01416
 [370]   0.00708   0.01416   0.00000
 [373]   0.02832  -0.02124   0.01416
 [376]   0.00708  -0.01416   0.00708
 [379]   0.02124   0.00000   0.01416
 [382]   0.00000   0.00708  -0.00708
 [385]   0.02124   0.01416   0.02124
 [388]   0.00708   0.00708   0.01416
 [391]   0.00000   0.02124   0.00000
 [394]   0.00708   0.00000   0.02124
 [397]  -0.01416   0.02124   0.00708
 [400]   0.01416   0.00708   0.01416
 [403]   0.00000   0.01416   0.00000
 [406]   0.00000   0.02124   0.00708
 [409]   0.00000   0.00708   0.00708
 [412]   0.01416   0.00000   0.00000
 [415]   0.00000   0.02124  -0.01416
 [418]   0.02832   0.00000   0.01416
 [421]   0.00708   0.00000   0.00000
 [424]   0.00000   0.00000   0.00708
 [427]   0.01416   0.01416   0.00708
 [430]   0.01416   0.01416   0.00708
 [433]  -0.00708   0.01416   0.00000
 [436]   0.00000   0.00708   0.01416
 [439]  -0.07080  -0.56640   0.01416
 [442]   0.21948   0.16284   0.10620
 [445]   0.05664   0.04956   0.02124
 [448]   0.01416   0.01416   0.02124
 [451]   0.01416   0.00708   0.00000
 [454]   0.00708   0.00708   0.01416
 [457]   0.02124   0.00000   0.00708
 [460]   0.00000   0.00000   0.00000
 [463]   0.00000   0.01416   0.00708
 [466]   0.00708   0.00000   0.00000
 [469]   0.00000   0.00000   0.00000
 [472]   0.00708   0.01416   0.00708
 [475]   0.00708   0.00708   0.01416
 [478]   0.00000   0.00000   0.00000
 [481]   0.00000   0.00708   0.00708
 [484]   0.01416   0.00000   0.00000
 [487]   0.00000   0.00000   0.00000
 [490]   0.01416   0.00000   0.01416
 [493]   0.00000   0.00000   0.01416
 [496]   0.00708   0.00708   0.00000
 [499]   0.00000   0.00000   0.00000
 [502]   0.00000   0.01416   0.00708
 [505]   0.00708   0.00000   0.00000
 [508]   0.00000   0.00000   0.00000
 [511]   0.00000   0.00000   0.00708
 [514]   0.01416   0.00000   0.00000
 [517]   0.00708   0.00000   0.00000
 [520]   0.00000   0.00000   0.00000
 [523]   0.01416   0.01416   0.00000
 [526]   0.00000   0.00000   0.00000
 [529]   0.00000   0.00000   0.00000
 [532]   0.00708   0.00000   0.00708
 [535]   0.00708   0.00000   0.00000
 [538]   0.00708   0.00000   0.00000
 [541]   0.00000   0.00000  -0.00708
 [544]   0.00708   0.00000   0.00000
 [547]   0.00000   0.00000   0.01416
 [550]   0.01416  -0.01416   0.00708
 [553]   0.00000  -0.01416   0.00708
 [556]   0.00000  -0.01416   0.00000
 [559]  -0.02124  -0.00708   0.00000
 [562]   0.00000   0.00000   0.00000
 [565]   0.00000   0.00000   0.00000
 [568]   0.02832   0.00000   0.00000
 [571]   0.02124   0.00708   0.00000
 [574]   0.00708  -0.00708   0.00000
 [577]   0.01416  -0.00708  -0.01416
 [580]  -0.02124  -0.00708  -0.01416
 [583]  -0.00708   0.00000  -0.02124
 [586]  -0.00708   0.00000   0.00000
 [589]   0.00000   0.00708   0.01416
 [592]   0.00708   0.01416   0.01416
 [595]   0.00708   0.02124   0.00000
 [598]   0.00000   0.00708   0.02124
 [601]   0.00000   0.00000   0.00708
 [604]   0.00708   0.01416   0.00000
 [607]   0.00000   0.00000   0.00000
 [610]   0.00000   0.00000   0.01416
 [613]   0.01416   0.00000   0.00000
 [616]   0.00000   0.00000   0.00000
 [619]   0.00000   0.00708   0.00708
 [622]   0.01416   0.00000   0.00000
 [625]   0.00000   0.00000   0.00000
 [628]   0.00000   0.00000   0.00000
 [631]   0.00000   0.00000   0.00000
 [634]   0.00000   0.00708  -0.00708
 [637]   0.02832  -0.00708   0.00708
 [640]   0.00000   0.00000   0.00000
 [643]   0.00000   0.00000   0.00708
 [646]  -0.00708   0.00000   0.00708
 [649]   0.00708   0.01416  -0.00708
 [652]   0.00708   0.00000   0.00000
 [655]   0.00000   0.00000  -0.07080
 [658]  -0.14868   0.00000   0.04248
 [661]   0.04956   0.04248   0.02832
 [664]   0.02124   0.00708   0.02124
 [667]   0.00708   0.00000   0.00000
 [670]   0.01416   0.00708   0.00708
 [673]   0.00000   0.00000   0.00000
 [676]   0.00000   0.00000   0.00000
 [679]   0.00000   0.00000   0.00000
 [682]   0.00000   0.00000   0.00000
 [685]   0.00000   0.00000   0.00000
 [688]   0.00000  -0.04956  -0.08496
 [691]  -0.33984  -0.17700   0.19824
 [694]   0.13452   0.06372   0.02832
 [697]   0.02832   0.02832   0.02832
 [700]   0.02124   0.02124   0.01416
 [703]   0.02124   0.00708   0.00000
 [706]   0.00708   0.02124   0.00000
 [709]   0.00000   0.00708   0.00708
 [712]   0.01416  -0.00708  -0.01416
 [715]   0.00708   0.01416   0.00000
 [718]   0.00000   0.00000   0.00000
 [721]   0.00000   0.00000   0.00000
 [724]   0.01416   0.00708   0.00000
 [727]   0.00708   0.00000  -0.02124
 [730]   0.00708   0.01416   0.00000
 [733]   0.00000   0.00000   0.00000
 [736]   0.00000   0.00000   0.00000
 [739]   0.00000   0.00000   0.02124
 [742]   0.00708   0.00000   0.00000
 [745]   0.00000   0.00000  -0.02124
 [748]  -0.02124  -0.06372  -0.08496
 [751]  -0.10620  -0.14868  -0.46020
 [754]  -0.33984  -0.02124   0.09912
 [757]   0.19116   0.15576   0.12744
 [760]   0.09912   0.07788   0.07788
 [763]   0.05664   0.03540   0.03540
 [766]   0.02832   0.02832   0.02124
 [769]   0.02124   0.01416   0.02124
 [772]   0.00708   0.02832   0.00000
 [775]   0.00708   0.02124   0.00000
 [778]   0.00000   0.00708   0.02124
 [781]   0.00000   0.00000   0.00000
 [784]   0.02124   0.00708   0.00000
 [787]   0.00000   0.00000   0.00000
 [790]   0.00708   0.01416   0.00708
 [793]   0.00000   0.00000   0.00000
 [796]   0.00000   0.00000   0.00000
 [799]   0.00000   0.00000   0.00000
 [802]   0.00708   0.00000   0.02124
 [805]  -0.01416   0.00708   0.00708
 [808]   0.00000   0.00000   0.00000
 [811]   0.00000   0.00000   0.00000
 [814]   0.00000   0.00708   0.00000
 [817]  -0.02124  -0.08496  -0.04248
 [820]   0.00000   0.00000   0.00000
 [823]   0.00000   0.00000   0.00000
 [826]   0.00000   0.00000   0.00000
 [829]   0.01416   0.00000  -0.00708
 [832]   0.02124  -0.02124  -0.03540
 [835]   0.02832   0.02832   0.00000
 [838]   0.00708  -0.00708   0.02124
 [841]  -0.01416  -0.00708   0.00000
 [844]  -0.01416  -0.04956  -0.02124
 [847]  -0.02832  -0.03540  -0.03540
 [850]  -0.04956  -0.12036  -0.07080
 [853]  -0.14160  -0.09912  -0.01416
 [856]   0.04956   0.04956   0.06372
 [859]   0.05664   0.00000   0.00708
 [862]   0.00000   0.00708   0.01416
 [865]   0.00708  -0.00708   0.00000
 [868]   0.00708   0.00000   0.00000
 [871]   0.00000   0.00708   0.01416
 [874]   0.02124   0.01416   0.01416
 [877]   0.01416   0.00708   0.02124
 [880]   0.00000   0.00708  -0.00708
 [883]  -0.04956  -0.03540  -0.47436
 [886]  -2.93112  -4.42500   1.09032
 [889]   0.65844   0.18408  -1.51512
 [892]  -5.38788 -10.78992 -15.70344
 [895]  -2.61960   6.15960   6.93840
 [898]   4.41792   4.63032   3.46920
 [901]   2.68332   1.99656   1.49388
 [904]   1.43724   2.80368  -0.43896
 [907]   0.39648   0.50976   0.41772
 [910]   0.29736   0.30444   0.23364
 [913]   0.16992   0.03540   0.11328
 [916]   0.17700   0.13452   0.16284
 [919]   0.16992   0.07080   0.09204
 [922]   0.12744   0.07080   0.08496
 [925]   0.09912   0.10620   0.07788
 [928]   0.07788   0.07080   0.07788
 [931]   0.07788   0.09912   0.07080
 [934]   0.04248   0.07080   0.08496
 [937]   0.06372   0.05664   0.04956
 [940]   0.04956   0.04248   0.04956
 [943]   0.04248   0.04956   0.02832
 [946]   0.04956   0.01416   0.02832
 [949]   0.04248   0.03540  -0.02832
 [952]  -0.00708   0.01416  -0.04248
 [955]  -0.22656  -0.43188  -0.77880
 [958]  -0.53100  -0.30444  -0.81420
 [961]  -1.50096  -1.16820  -0.21240
 [964]  -0.11328   0.22656   0.46020
 [967]   0.49560   0.46728   0.47436
 [970]   0.41064   0.58764   0.67968
 [973]   0.36108   0.23364   0.15576
 [976]   0.13452   0.07788   0.12744
 [979]   0.07788   0.12036   0.08496
 [982]   0.06372   0.07080   0.10620
 [985]   0.02124  -0.00708   0.08496
 [988]   0.07080   0.03540   0.05664
 [991]   0.02124   0.06372   0.05664
 [994]   0.04956   0.04248   0.03540
 [997]   0.03540   0.04956   0.02124
[1000]   0.04248
 [ reached getOption("max.print") -- omitted 25280 entries ]
length(ChangeRF(as.numeric(hilomodified$cms)))
[1] 26280
length(hilomodified$cms) # same length
[1] 26280
hilomodified$changeCMS <- change.vector

head(hilomodified)
# 10-11 negative start of storm
# 11-10 positive end of storm

positive.change <- vector()
negative.change <- vector()
index <- vector()


for(i in 1:length(hilomodified$cms)){
  if (hilomodified$changeCMS[i] < 0 ){
    negative.change[i] <- i
  }else{
    if(hilomodified$changeCMS[i] > 0){
      postive.change[i] <- i
    }
  }
  if(hilomodified$cms[i] >= 10 ){
    index[i] <- i
  }
}
Error: object 'postive.change' not found
storm <- ggplot(hilostorms[50:250,],  aes(x = date, y = as.numeric(cms))) +
  geom_line(color="black")+
  geom_line(aes(y = as.numeric(Corr.NTU)), color="grey69") +
  geom_line(aes(y=as.numeric(ChlRFU)),color="khaki")
Error in ggplot(hilostorms[50:250, ], aes(x = date, y = as.numeric(cms))) : 
  object 'hilostorms' not found

vector <- vector()
for(i in 1:length(storms)){
  if(isTRUE(abs(storms[i]-storms[i+1]) > 10)){
    stop <- storms[i]
  }else{
    stop <- 0
  }
  if(stop > 0){
    vector[i] <- stop
  }
}
Error in storms[i] - storms[i + 1] : 
  non-numeric argument to binary operator
startaxis <- vector()
endaxis <- vector()
i <- 1
while (i <= length(change.vector)) {
  if(isTRUE(change.vector[i] < 0)){
    startaxis[i] <- RiverFlow[i]
  }
  i <- i+1
}
begin<-which(is.na(startaxis) == FALSE)
begin
   [1]    1    2    3    4    5    6
   [7]    7    8    9   10   11   12
  [13]   13   14   15   16   17   18
  [19]   19   20   21   22   23   24
  [25]   25   26   27   28   29   30
  [31]   31   32   33   34   35   36
  [37]   37   38   39   40   41   42
  [43]   43   44   45   46   47   48
  [49]   49   50   51   52   53   54
  [55]   55   56   57   58   59   60
  [61]   61   62   63   64   65   66
  [67]   67   68   69   70   71   72
  [73]   73   74   75   76   77   78
  [79]   79   80   81   82   83   84
  [85]   85   86   87   88   89   90
  [91]   91   92   93   94   95   96
  [97]   97   98   99  100  101  102
 [103]  103  104  105  106  107  108
 [109]  109  110  111  112  113  114
 [115]  115  116  117  118  119  120
 [121]  121  122  123  124  125  126
 [127]  127  128  129  130  131  132
 [133]  133  134  135  136  137  138
 [139]  139  140  141  142  143  144
 [145]  145  146  147  148  149  150
 [151]  151  152  153  154  155  156
 [157]  157  158  159  160  161  162
 [163]  163  164  165  166  167  168
 [169]  169  170  171  172  173  174
 [175]  175  176  177  178  179  180
 [181]  181  182  183  184  185  186
 [187]  187  188  189  190  191  192
 [193]  193  194  195  196  197  198
 [199]  199  200  201  202  203  204
 [205]  205  206  207  208  209  210
 [211]  211  212  213  214  215  216
 [217]  217  218  219  220  221  222
 [223]  223  224  225  226  227  228
 [229]  229  230  231  232  233  234
 [235]  235  236  237  238  239  240
 [241]  241  242  243  244  245  246
 [247]  247  248  249  250  251  252
 [253]  253  254  255  256  257  258
 [259]  259  260  261  262  263  264
 [265]  265  266  267  268  269  270
 [271]  271  272  273  274  275  276
 [277]  277  278  279  280  281  282
 [283]  283  284  285  286  287  288
 [289]  289  290  291  292  293  294
 [295]  295  296  297  298  299  300
 [301]  301  302  303  304  305  306
 [307]  307  308  309  310  311  312
 [313]  313  314  315  316  317  318
 [319]  319  320  321  322  323  324
 [325]  325  326  327  328  329  330
 [331]  331  332  333  334  335  336
 [337]  337  338  339  340  341  342
 [343]  343  344  345  346  347  348
 [349]  349  350  351  352  353  354
 [355]  355  356  357  358  359  360
 [361]  361  362  363  364  365  366
 [367]  367  368  369  370  371  372
 [373]  373  374  375  376  377  378
 [379]  379  380  381  382  383  384
 [385]  385  386  387  388  389  390
 [391]  391  392  393  394  395  396
 [397]  397  398  399  400  401  402
 [403]  403  404  405  406  407  408
 [409]  409  410  411  412  413  414
 [415]  415  416  417  418  419  420
 [421]  421  422  423  424  425  426
 [427]  427  428  429  430  431  432
 [433]  433  434  435  436  437  438
 [439]  439  440  441  442  443  444
 [445]  445  446  447  448  449  450
 [451]  451  452  453  454  455  456
 [457]  457  458  459  460  461  462
 [463]  463  464  465  466  467  468
 [469]  469  470  471  472  473  474
 [475]  475  476  477  478  479  480
 [481]  481  482  483  484  485  486
 [487]  487  488  489  490  491  492
 [493]  493  494  495  496  497  498
 [499]  499  500  501  502  503  504
 [505]  505  506  507  508  509  510
 [511]  511  512  513  514  515  516
 [517]  517  518  519  520  521  522
 [523]  523  524  525  526  527  528
 [529]  529  530  531  532  533  534
 [535]  535  536  537  538  539  540
 [541]  541  542  543  544  545  546
 [547]  547  548  549  550  551  552
 [553]  553  554  555  556  557  558
 [559]  559  560  561  562  563  564
 [565]  565  566  567  568  569  570
 [571]  571  572  573  574  575  576
 [577]  577  578  579  580  581  582
 [583]  583  584  585  586  587  588
 [589]  589  590  591  592  593  594
 [595]  595  596  597  598  599  600
 [601]  601  602  603  604  605  606
 [607]  607  608  609  610  611  612
 [613]  613  614  615  616  617  618
 [619]  619  620  621  622  623  624
 [625]  625  626  627  628  629  630
 [631]  631  632  633  634  635  636
 [637]  637  638  639  640  641  642
 [643]  643  644  645  646  647  648
 [649]  649  650  651  652  653  654
 [655]  655  656  657  658  659  660
 [661]  661  662  663  664  665  666
 [667]  667  668  669  670  671  672
 [673]  673  674  675  676  677  678
 [679]  679  680  681  682  683  684
 [685]  685  686  687  688  689  690
 [691]  691  692  693  694  695  696
 [697]  697  698  699  700  701  702
 [703]  703  704  705  706  707  708
 [709]  709  710  711  712  713  714
 [715]  715  716  717  718  719  720
 [721]  721  722  723  724  725  726
 [727]  727  728  729  730  731  732
 [733]  733  734  735  736  737  738
 [739]  739  740  741  742  743  744
 [745]  745  746  747  748  749  750
 [751]  751  752  753  754  755  756
 [757]  757  758  759  760  761  762
 [763]  763  764  765  766  767  768
 [769]  769  770  771  772  773  774
 [775]  775  776  777  778  779  780
 [781]  781  782  783  784  785  786
 [787]  787  788  789  790  791  792
 [793]  793  794  795  796  797  798
 [799]  799  800  801  802  803  804
 [805]  805  806  807  808  809  810
 [811]  811  812  813  814  815  816
 [817]  817  818  819  820  821  822
 [823]  823  824  825  826  827  828
 [829]  829  830  831  832  833  834
 [835]  835  836  837  838  839  840
 [841]  841  842  843  844  845  846
 [847]  847  848  849  850  851  852
 [853]  853  854  855  856  857  858
 [859]  859  860  861  862  863  864
 [865]  865  866  867  868  869  870
 [871]  871  872  873  874  875  876
 [877]  877  878  879  880  881  882
 [883]  883  884  885  886  887  888
 [889]  889  890  891  892  893  894
 [895]  895  896  897  898  899  900
 [901]  901  902  903  904  905  906
 [907]  907  908  909  910  911  912
 [913]  913  914  915  916  917  918
 [919]  919  920  921  922  923  924
 [925]  925  926  927  928  929  930
 [931]  931  932  933  934  935  936
 [937]  937  938  939  940  941  942
 [943]  943  944  945  946  947  948
 [949]  949  950  951  952  953  954
 [955]  955  956  957  958  959  960
 [961]  961  962  963  964  965  966
 [967]  967  968  969  970  971  972
 [973]  973  974  975  976  977  978
 [979]  979  980  981  982  983  984
 [985]  985  986  987  988  989  990
 [991]  991  992  993  994  995  996
 [997]  997  998  999 1000
 [ reached getOption("max.print") -- omitted 25276 entries ]
while (i <= length(change.vector)) {
  if(isTRUE(change.vector[i] > 0)){
    endaxis[i] <- RiverFlow[i]
  }
  i <- i+1
}
end <- which(is.na(endaxis)==FALSE)


storm.1.7.13 <- ggplot(hilomodified[begin,],  aes(x = date, y = as.numeric(cms))) + 
  geom_line(color="black")+
  geom_line(aes(y = as.numeric(Corr.NTU)), color="grey69") +
  geom_line(aes(y=as.numeric(ChlRFU)),color="khaki")

print(storm.1.7.13 + ggtitle("Storm 1/7/13")+labs(x="Time"))

while (i <= length(change.vector)) {
  if(isTRUE(change.vector[i] < 0)){
    startaxis[i] <- RiverFlow[i]
    i <- i+1
  }else{
    if(isTRUE(change.vector[i] > 0)){
      endaxis[i] <- RiverFlow[i]
    }
  }
}
LS0tCnRpdGxlOiAiRGF0YSBDbGVhbmluZyAmIERlc2NyaXB0aXZlcyIKYXV0aG9yOiAiQnJpYW5uYSBDaXJpbGxvICYgT2RhbHlzIEJhcnJpZW50b3MiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCiMgTGlicmFyaWVzCmBgYHtyfQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoc2NhbGVzKQpsaWJyYXJ5KEFtZWxpYSkKbGlicmFyeShsdWJyaWRhdGUpCmxpYnJhcnkoeHRzKQpsaWJyYXJ5KG9wZW5haXIpCmxpYnJhcnkodGlkeXIpCmxpYnJhcnkoZ2dhbmltYXRlKQpgYGAKCiMgTWF0Y2hpbmcgdGhlIGJvdXkgZGF0YSB0byB0aGUgb3RoZXIgZGF0YSBjb2xsZWN0ZWQgCmBgYHtyfQpoaWxvIDwtIGhiYl93a3VfaF94dHMKaGlsbyA8LSBkYXRhLmZyYW1lKGRhdGU9aW5kZXgoaGlsbyksIGNvcmVkYXRhKGhpbG8pKQpoaWxvIDwtIGhpbG9bNTI5OjU0ODE2LF0KaGlsbwojIHdoaWNoKGhpbG8kZGF0ZT09IjIwMTAtMTAtMjMgMDA6MDA6MDAiKSA9IGluZGV4IDUyOSAKCiMgd2hpY2goaGlsbyRkYXRlPT0iMjAxNi0xMi0zMSAyMzowMDowMCIpID0gaW5kZXggNTQ4MTYKYGBgCmBgYHtyfQpsZW5ndGgoaGlsb1ssMV0pICMgd2UgYXJlIGxlZnQgd2l0aCA1NDI4OCBsaW5lcyBvZiBkYXRhCgo1NDgxNiAtIGxlbmd0aChoaWxvWywxXSkgIyB3ZSBsb3N0IDUyOCB2YWx1ZXMgCmBgYAoKIyBDaGFuZ2luZyBjb2x1bW4gbmFtZXMgCmBgYHtyfQojIHJlbW92aW5nIGNvbHVtbnMgdGhhdCB3ZSBhcmUgbm90IHVzaW5nIApoaWxvJGRhdGUuMiA8LSBOVUxMICMgYW5vdGhlciBkYXRlIGNvbHVtbgpoaWxvJGRhdGUuMSA8LSBOVUxMICMgYW5vdGhlciBkYXRlIGNvbHVtbgpoaWxvJEJHQVJGVSA8LSBOVUxMICMgPwpoaWxvJGNmcyA8LSBOVUxMCmhpbG8kRE9tZ0wgPC0gTlVMTCAjIGRpc3NvbHZlZCBveHlnZW4KI2hpbG8kRG9wZXIgPC0gTlVMTCAjIGRpc3NvbHZlZCBveHlnZW4KaGlsbyRQQVIxIDwtIE5VTEwgIyA/CmhpbG8kcEggPC0gTlVMTCAjIHBICmhpbG8kTlRVIDwtIE5VTEwgIyBhIGRpZmZlcmVudCBtZWFzdXJlbWVudCBmb3IgdHVyYml0aXR5CmhpbG8kRE9wZXIxMCA8LSBOVUxMICMgZGlzc29sdmVkIG94eWdlbgoKIyBjb2xuYW1lcyhoaWxvKSA8LSBjKCJEYXRlIiwgImNmcyIsICJSaXZlckZsb3ctY3VtZWMiLCAiTG9nUml2ZXJGbG93LWN1bWVjIiwgIkNobG9yb3BoeWxsLVJGVSIsICJTYWxpbml0eS1QUFQiLCAiVGVtcC1DIiwgImNobG9yb3BoeWxsLWNhbGlicmF0b3IiLCAiVHVyYmlkaXR5LU5UVSIpCiMgZG9lcyBub3Qgd29yayA/Pz8KCmhpbG8KYGBgCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgojIEZVTEwgREFUQSBTRVQgMjAxMi0yMDE2CiMgRGVzY3JpcHRpdmVzOiBQTG90cwoKIyMgUml2ZXIgRmxvdyBGVUxMIERBVEEgU0VUCmBgYHtyfQpsZW5ndGgoaGlsbyRsb2djbXNbd2hpY2goaXMubmEoaGlsbyRsb2djbXMpPT1UUlVFKV0pICMgMTIgTkFzIAp3aGljaChpcy5uYShoaWxvJGxvZ2Ntcyk9PVRSVUUpCgpSaXZlckZsb3cgPC0gZ2dwbG90KGhpbG8sICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGNtcykpKSArIAogIGdlb21fbGluZSgpCgpwcmludChSaXZlckZsb3cgKyBnZ3RpdGxlKCJSaXZlciBGbG93IikrbGFicyh4PSJUaW1lIiwgeSA9ICJSaXZlciBGbG93IC0gY3ViaWMgbWV0ZXJzIHBlciBzZWNvbmQiKSkKYGBgCiMjIENITCBGVUxMIERBVEEgU0VUCmBgYHtyfQpsZW5ndGgoaGlsbyRDaGxSRlVbd2hpY2goaXMubmEoaGlsbyRDaGxSRlUpPT1UUlVFKV0pICMgMjA0NjQgTkFzCgp3aGljaChhcy5udW1lcmljKGhpbG8kQ2hsUkZVKT09bWF4KGFzLm51bWVyaWMobmEub21pdChoaWxvJENobFJGVSkpKSkgIyAxNS4zIG1heCAKIyBDSEwgdGVsbHMgdXMgd2hlcmUgaW4gdGhlIGRhdGEgc2V0IHRoaXMgaGFwcGVuZWQgIApoaWxvWzM4OTc0LF0KCkNITCA8LSBnZ3Bsb3QoaGlsbywgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoQ2hsUkZVKSkpICsgCiAgZ2VvbV9saW5lKCkKCnByaW50KENITCArIGdndGl0bGUoIkNobG9yb3BoeWxsICIpK2xhYnMoeD0iVGltZSIsIHkgPSAiQ2hsb3JvcGh5bGwgIC0gcmVsYXRpdmUgZmx1b3Jlc2NlbmNlIHVuaXRzIChSRlUpIikpCmBgYAojIyBUdXJiaXR5IEZVTEwgREFUQSBTRVQKYGBge3J9Cmxlbmd0aChoaWxvJENvcnIuTlRVW3doaWNoKGlzLm5hKGhpbG8kQ29yci5OVFUpPT1UUlVFKV0pICMxNTAxMiBOQXMKCndoaWNoKGFzLm51bWVyaWMoaGlsbyRDb3JyLk5UVSk9PW1heChhcy5udW1lcmljKG5hLm9taXQoaGlsbyRDb3JyLk5UVSkpKSkgIyA4OC40CiMgdGVsbHMgdXMgd2hlcmUgaW4gdGhlIGRhdGEgc2V0IHRoaXMgaGFwcGVuZWQKaGlsb1szMzI0MyxdCgpUVVJCIDwtIGdncGxvdChoaWxvLGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoQ29yci5OVFUpKSkgKyAKICBnZW9tX2xpbmUoKQoKcHJpbnQoVFVSQiArIGdndGl0bGUoIlR1cmJpZGl0eSAiKStsYWJzKHg9IlRpbWUiLCB5ID0gIlR1cmJpZGl0eSAtIE5lcGhlbG9tZXRyaWMgVHVyYmlkaXR5IFVuaXRzIChOVFUpIikpCmBgYAojIyBTYWxpbml0eSBGVUxMIERBVEEgU0VUCmBgYHtyfQpsZW5ndGgoaGlsbyRzYWx0cHB0W3doaWNoKGlzLm5hKGhpbG8kc2FsdHBwdCk9PVRSVUUpXSkgIzExMzMwIE5BcwoKU0FMVCA8LSBnZ3Bsb3QoaGlsbywgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoc2FsdHBwdCkpKSArIAogIGdlb21fbGluZSgpCgpwcmludChTQUxUICsgZ2d0aXRsZSgiU2FsaW5pdHkiKStsYWJzKHg9IlRpbWUiLCB5ID0gIlNhbGluaXR5IC0gdW5pdCBwYXJ0cyBwZXIgdGhvdXNhbmQgKFBQVCkiKSkKYGBgCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIEhpc3RvZ3JhbXMgRlVMTCBEQVRBIFNFVAojIyBSaXZlciBGbG93IEhpc3RvZ3JhbQpgYGB7cn0KaGlzdChhcy5udW1lcmljKGhpbG8kbG9nY21zKSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgTG9nIFJpdmVyIEZsb3ciLCB4bGFiID0gIkxvZyBSaXZlciBGbG93IikKCiMgdGhpcyBsb29rcyBva2F5CmBgYAojIyBDSEwgSGlzdG9ncmFtCmBgYHtyfQojIFZFUlkgc2tld2VkCmhpc3QoYXMubnVtZXJpYyhoaWxvJENobFJGVSksIG1haW4gPSAiSGlzdG9ncmFtIG9mIENobG9yb3BoeWxsIiwgeGxhYiA9ICJDaGxvcm9waHlsbCAgLSByZWxhdGl2ZSBmbHVvcmVzY2VuY2UgdW5pdHMgKFJGVSkiKQoKIyB0aGlzIGxvb2tzIGJldHRlcgpoaXN0KGxvZyhhcy5udW1lcmljKGhpbG8kQ2hsUkZVKSksIG1haW4gPSAiSGlzdG9ncmFtIG9mIExvZyBDaGxvcm9waHlsbCIsIHhsYWIgPSAiQ2hsb3JvcGh5bGwiKQojIG5vdCBzdXJlIHdoYXQgaGFwcGVucyB0byB1bml0cyB3aGVuIHRha2luZyB0aGUgbG9nIApgYGAKIyMgVHVyYml0eSBIaXN0b2dyYW0KYGBge3J9CiMgVkVSWSBza2V3ZWQKaGlzdChhcy5udW1lcmljKGhpbG8kQ29yci5OVFUpLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBUdXJiaWRpdHkiLCB4bGFiID0gIlR1cmJpZGl0eSAtIE5lcGhlbG9tZXRyaWMgVHVyYmlkaXR5IFVuaXRzIChOVFUpIikKCiMgdGhpcyBsb29rcyBiZXR0ZXIKaGlzdChsb2coYXMubnVtZXJpYyhoaWxvJENvcnIuTlRVKSksIG1haW4gPSAiSGlzdG9ncmFtIG9mIExvZyBUdXJiaWRpdHkiLCB4bGFiID0gIlR1cmJpZGl0eSIpCiMgbm90IHN1cmUgd2hhdCBoYXBwZW5zIHRvIHVuaXRzIHdoZW4gdGFraW5nIHRoZSBsb2cgCmBgYAojIyBTYWxpbml0eSBIaXN0b2dyYW0KYGBge3J9CiMgc2tld2VkCmhpc3QoYXMubnVtZXJpYyhoaWxvJHNhbHRwcHQpLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBTYWxpbml0eSIsIHhsYWIgPSAiU2FsaW5pdHkgLSB1bml0IHBhcnRzIHBlciB0aG91c2FuZCAoUFBUKSIpCgojIHRoaXMgaXMgd29yc3QhCmhpc3QobG9nKGFzLm51bWVyaWMoaGlsbyRzYWx0cHB0KSksIG1haW4gPSAiSGlzdG9ncmFtIG9mIExvZyBTYWxpbml0eSIsIHhsYWIgPSAiU2FsaW5pdHkiKQojIG5vdCBzdXJlIHdoYXQgaGFwcGVucyB0byB1bml0cyB3aGVuIHRha2luZyB0aGUgbG9nIApgYGAKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIE5FVyBEQVRBIFNFVC1Nb2RpZmllZCBEYXRhIDIwMTMtMjAxNQpgYGB7cn0KIyBzdGFydCBkYXRlOiAyMDEzLTAxLTAxIDAwOjAwOjAwCiMgZW5kIGRhdGU6IDIwMTUtMTItMzEgMjM6MDA6MDAKaGlsb21vZGlmaWVkIDwtIGhpbG9bMTkyMjU6NDU1MDQsXQpsZW5ndGgoaGlsb1ssMV0pLWxlbmd0aChoaWxvbW9kaWZpZWRbLDFdKQojIGxvc3QgMjgwMDggZW50cmllcyBvZiBkYXRhIAoKbGVuZ3RoKGhpbG9tb2RpZmllZFssMV0pLTUyOCAjIHdlIGFyZSBsZWZ0IHdpdGggMjU3NTIgZW50cmllcyBvZiBkYXRhIAoKCmhlYWQoaGlsb21vZGlmaWVkKQp0YWlsKGhpbG9tb2RpZmllZCkKCmBgYAoKIyBEZXNjcmlwdGl2ZXMgb24gYWxsIHZhcmlhYmxlcyBNT0RJRklFRCBEQVRBIFNFVDogVXNpbmcgRmF2c3RhdHMKIyMgUml2ZXIgRmxvdyBGYXZzdGF0cwpgYGB7cn0KbGlicmFyeShtb3NhaWMpCmZhdnN0YXRzKGhpbG9tb2RpZmllZCRjbXMpCmBgYAojIyBDSEwgRmF2c3RhdHMKYGBge3J9CmZhdnN0YXRzKGhpbG9tb2RpZmllZCRDaGxSRlUpCmBgYAojIyBUdXJiaXRpdHkgRmF2c3RhdHMKYGBge3J9CmZhdnN0YXRzKGhpbG9tb2RpZmllZCRDb3JyLk5UVSkKYGBgCiMjIFNhbGluaXR5IEZhdnN0YXRzCmBgYHtyfQpmYXZzdGF0cyhoaWxvbW9kaWZpZWQkc2FsdHBwdCkKZmF2c3RhdHMoaGlsb21vZGlmaWVkJFRlbXBDKQpmYXZzdGF0cyhoaWxvbW9kaWZpZWQkRG9wZXIpCmBgYAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBNT0RJRklFRCBEQVRBIFNFVCAyMDEzLTIwMTUKIyBEZXNjcmlwdGl2ZXM6IFBsb3RzCgojIyBSaXZlciBGbG93IE1PRElGSUVECmBgYHtyfQpsZW5ndGgoaGlsb21vZGlmaWVkJGxvZ2Ntc1t3aGljaChpcy5uYShoaWxvbW9kaWZpZWQkbG9nY21zKT09VFJVRSldKSAjIE5vIE5BcywgWUFZIQp3aGljaChpcy5uYShoaWxvbW9kaWZpZWQkbG9nY21zKT09VFJVRSkKClJpdmVyRmxvd01vZCA8LSBnZ3Bsb3QoaGlsb21vZGlmaWVkLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhjbXMpKSkgKyAKICBnZW9tX2xpbmUoKQoKcHJpbnQoUml2ZXJGbG93TW9kICsgZ2d0aXRsZSgiUml2ZXIgRmxvdyIpK2xhYnMoeD0iVGltZSIsIHkgPSAiUml2ZXIgRmxvdyAtIGN1YmljIG1ldGVycyBwZXIgc2Vjb25kIikpCmBgYAojIyBDSEwgTU9ESUZJRUQKYGBge3J9CnN1bShpcy5uYShoaWxvbW9kaWZpZWQkQ2hsUkZVKT09VFJVRSkgIyAxODg0IE5Bcwojd2hpY2goaXMubmEoaGlsb21vZGlmaWVkJENobFJGVSk9PVRSVUUpCiMgbWF4KGFzLm51bWVyaWMobmEub21pdChoaWxvJENobFJGVSkpKSAjIDE1LjMKd2hpY2goYXMubnVtZXJpYyhoaWxvbW9kaWZpZWQkQ2hsUkZVKT09MTUuMykKaGlsb1szODk3NCxdCgpDSExNb2QgPC0gZ2dwbG90KGhpbG9tb2RpZmllZCwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoQ2hsUkZVKSkpICsgCiAgZ2VvbV9saW5lKCkKCnByaW50KENITE1vZCArIGdndGl0bGUoIkNobG9yb3BoeWxsICIpK2xhYnMoeD0iVGltZSIsIHkgPSAiQ2hsb3JvcGh5bGwgIC0gcmVsYXRpdmUgZmx1b3Jlc2NlbmNlIHVuaXRzIChSRlUpIikpCmBgYAoKCiMgVHVyYml0aXR5IE1PRElGSUVECmBgYHtyfQpsZW5ndGgoaGlsb21vZGlmaWVkJENvcnIuTlRVW3doaWNoKGlzLm5hKGhpbG9tb2RpZmllZCRDb3JyLk5UVSk9PVRSVUUpXSkgIyAyNzA0IE5BcwojIG1heChhcy5udW1lcmljKG5hLm9taXQoaGlsbyRDb3JyLk5UVSkpKSAjIDg4LjQKd2hpY2goYXMubnVtZXJpYyhoaWxvJENvcnIuTlRVKT09ODguNCkKaGlsb1szMzI0MyxdCgpUVVJCTW9kIDwtIGdncGxvdChoaWxvbW9kaWZpZWQsICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKENvcnIuTlRVKSkpICsgCiAgZ2VvbV9saW5lKCkKCnByaW50KFRVUkJNb2QgKyBnZ3RpdGxlKCJUdXJiaWRpdHkgIikrbGFicyh4PSJUaW1lIiwgeSA9ICJUdXJiaWRpdHkgLSBOZXBoZWxvbWV0cmljIFR1cmJpZGl0eSBVbml0cyAoTlRVKSIpKQpgYGAKCiMgU2FsaW5pdHkgTU9ESUZJRUQKYGBge3J9Cmxlbmd0aChoaWxvbW9kaWZpZWQkc2FsdHBwdFt3aGljaChpcy5uYShoaWxvbW9kaWZpZWQkc2FsdHBwdCk9PVRSVUUpXSkgIyAyMjY3IE5BcwoKU0FMVE1vZCA8LSBnZ3Bsb3QoaGlsb21vZGlmaWVkLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhzYWx0cHB0KSkpICsgCiAgZ2VvbV9saW5lKCkKCnByaW50KFNBTFRNb2QgKyBnZ3RpdGxlKCJTYWxpbml0eSIpK2xhYnMoeD0iVGltZSIsIHkgPSAiU2FsaW5pdHkgLSB1bml0IHBhcnRzIHBlciB0aG91c2FuZCAoUFBUKSIpKQpgYGAKIyBUZW1wdXJhdHVyZSBNT0RJRklFRApgYGB7cn0KbGVuZ3RoKGhpbG9tb2RpZmllZCRUZW1wQ1t3aGljaChpcy5uYShoaWxvbW9kaWZpZWQkVGVtcEMpPT1UUlVFKV0pICMgMjI2NyBOQXMKClRlbXBNb2QgPC0gZ2dwbG90KGhpbG9tb2RpZmllZCwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoVGVtcEMpKSkgKyAKICBnZW9tX2xpbmUoKQoKcHJpbnQoVGVtcE1vZCArIGdndGl0bGUoIlRlbXBlcmF0dXJlIikrbGFicyh4PSJUaW1lIiwgeSA9ICJUZW1wZXJhdHVyZSAtIENlbHNpdXMiKSkKYGBgCiMgRGlzc29sdmVkIE94eWdlbiBNT0RJRklFRApgYGB7cn0KbGVuZ3RoKGhpbG9tb2RpZmllZCREb3Blclt3aGljaChpcy5uYShoaWxvbW9kaWZpZWQkRG9wZXIpPT1UUlVFKV0pICMgMjI2NyBOQXMKClRlbXBNb2QgPC0gZ2dwbG90KGhpbG9tb2RpZmllZCwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoRG9wZXIpKSkgKyAKICBnZW9tX2xpbmUoKQoKcHJpbnQoVGVtcE1vZCArIGdndGl0bGUoIkRpc3NvbHZlZCBPeHlnZW4iKStsYWJzKHg9IlRpbWUiLCB5ID0gIkRpc3NvbHZlZCBPeHlnZW4gaW4gcGVyY2VudCBvZiBzYXR1cmF0aW9uIikpCmBgYAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBIaXN0b2dyYW1zIE1PRElGSUVEIAoKIyMgUml2ZXIgRmxvdyBNT0RJRklFRApgYGB7cn0KaGlzdChhcy5udW1lcmljKGhpbG9tb2RpZmllZCRjbXMpLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBMb2cgUml2ZXIgRmxvdyIsIHhsYWIgPSAiTG9nIFJpdmVyIEZsb3ciLCBicmVha3MgPTkwLCB4bGltID0gYygwLDEwMCkpCgojIHRoaXMgbG9va3Mgb2theQpgYGAKIyMgQ0hMIE1PRElGSUVECmBgYHtyfQojIFZFUlkgc2tld2VkCmhpc3QoYXMubnVtZXJpYyhoaWxvbW9kaWZpZWQkQ2hsUkZVKSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgQ2hsb3JvcGh5bGwiLCB4bGFiID0gIkNobG9yb3BoeWxsICAtIHJlbGF0aXZlIGZsdW9yZXNjZW5jZSB1bml0cyAoUkZVKSIpCgojIHRoaXMgbG9va3MgYmV0dGVyCmhpc3QobG9nKGFzLm51bWVyaWMoaGlsb21vZGlmaWVkJENobFJGVSkpLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBMb2cgQ2hsb3JvcGh5bGwiLCB4bGFiID0gIkNobG9yb3BoeWxsIikKIyBub3Qgc3VyZSB3aGF0IGhhcHBlbnMgdG8gdW5pdHMgd2hlbiB0YWtpbmcgdGhlIGxvZyAKYGBgCiMjIFR1cmJpdGl0eSBNT0RJRklFRApgYGB7cn0KIyBWRVJZIHNrZXdlZApoaXN0KGFzLm51bWVyaWMoaGlsb21vZGlmaWVkJENvcnIuTlRVKSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgVHVyYmlkaXR5IiwgeGxhYiA9ICJUdXJiaWRpdHkgLSBOZXBoZWxvbWV0cmljIFR1cmJpZGl0eSBVbml0cyAoTlRVKSIpCgojIHRoaXMgbG9va3MgYmV0dGVyCmhpc3QobG9nKGFzLm51bWVyaWMoaGlsb21vZGlmaWVkJENvcnIuTlRVKSksIG1haW4gPSAiSGlzdG9ncmFtIG9mIExvZyBUdXJiaWRpdHkiLCB4bGFiID0gIlR1cmJpZGl0eSIpCiMgbm90IHN1cmUgd2hhdCBoYXBwZW5zIHRvIHVuaXRzIHdoZW4gdGFraW5nIHRoZSBsb2cgCmBgYAojIyBTYWxpbml0eSBNT0RJRklFRApgYGB7cn0KIyBza2V3ZWQKaGlzdChhcy5udW1lcmljKGhpbG9tb2RpZmllZCRzYWx0cHB0KSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgU2FsaW5pdHkiLCB4bGFiID0gIlNhbGluaXR5IC0gdW5pdCBwYXJ0cyBwZXIgdGhvdXNhbmQgKFBQVCkiKQoKIyB0aGlzIGlzIHdvcnN0IQpoaXN0KGxvZyhhcy5udW1lcmljKGhpbG9tb2RpZmllZCRzYWx0cHB0KSksIG1haW4gPSAiSGlzdG9ncmFtIG9mIExvZyBTYWxpbml0eSIsIHhsYWIgPSAiU2FsaW5pdHkiKQojIG5vdCBzdXJlIHdoYXQgaGFwcGVucyB0byB1bml0cyB3aGVuIHRha2luZyB0aGUgbG9nIApgYGAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKIyBQbG90IHdpdGggQUxMIFZhciAyMDEzLTIwMTUKSXQgaXMgaGFyZCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbiAKYGBge3J9CkFsbFllYXJzIDwtIGdncGxvdChoaWxvbW9kaWZpZWQsICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGxvZ2NtcykpKSArIAogIGdlb21fbGluZSgpKwogIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoc2FsdHBwdCkpLCBjb2xvciA9ICJkYXJrcmVkIikgKwogIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoQ29yci5OVFUpKSwgY29sb3I9ImRhcmtncmVlbiIpICsKICBnZW9tX2xpbmUoYWVzKHk9YXMubnVtZXJpYyhDaGxSRlUpKSxjb2xvcj0iYmx1ZSIpCgpwcmludChBbGxZZWFycyArIGdndGl0bGUoIkhpbG8gQmF5IikrbGFicyh4PSJUaW1lIiwgeSA9ICJSaXZlciBGbG93IC0gY3ViaWMgbWV0ZXJzIHBlciBzZWNvbmQiKSkKCmBgYAoKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgRGVzY3JpcHRpdmVzIGJ5IFN0b3JtCldlIGFyZSBwaWNraW5nIG9uZSBzdG9ybSBmcm9tIGVhY2ggeWVhci4gV2UgY2FuIGluZGljYXRlIGEgc3Rvcm0gaGFzIG9jY3VycmVkIGJ5IHRoZSBleHRyZW1lIGV2ZW50cyBpbiB0aGUgcml2ZXIgZmxvdyBkYXRhLiAKV2Ugd2lsbCBub3QgdXNlIHRoZSBsb2cgKHdoaWNoIGlzIGxvZ2Jhc2UxMCkgaW4gb3JkZXIgdG8gc2VlIHRoZSBleHRyZW1lIGV2ZW50cwpXaGVuIHNhbGluaXR5IGlzIGJlbG93IDM1IHRoaXMgYWxzbyBpbmRpY2F0ZXMgYSBzdG9ybSBoYXMgb2NjdXJyZWQuIAoKV2Ugd2lsbCBicmVhayB0aGUgZGF0YSBzZXQgYnkgeWVhciB0byBmaW5kIHRoZSBtb3N0IGV4dHJlbWUgZXZlbnQgZm9yIGVhY2ggeWVhci4gCmBgYHtyfQpoaWxvMjAxMyA8LSBoaWxvbW9kaWZpZWRbMTo4NzYwLF0KCmhpbG8yMDE0IDwtIGhpbG9tb2RpZmllZFs4NzYxOjE3NTIwLF0KCmhpbG8yMDE1IDwtIGhpbG9tb2RpZmllZFsxNzUyMTpsZW5ndGgoaGlsb21vZGlmaWVkWywxXSksXQpgYGAKCiMgMjAxMyBEYXRhICYgUGxvdApgYGB7cn0KIyBtYXgoYXMubnVtZXJpYyhoaWxvMjAxMyRsb2djbXMpKSAjIHRoaXMgaXMgbG9nIGJhc2UgMTAgCiMgVGhpcyBpcyBOT1QgdGhlIG5hdHVyYWwgbG9nCm1heChhcy5udW1lcmljKGhpbG8yMDEzJGNtcykpICMgMjA3LjE4NiAKd2hpY2goYXMubnVtZXJpYyhoaWxvMjAxMyRjbXMpID09IG1heChhcy5udW1lcmljKGhpbG8yMDEzJGNtcykpKQoKaGlsbzIwMTNbMzU1MCxdCiMgYWxsIHZhbHVlcyBmb3IgdGhpcyBzdG9ybSBhcmUgTkEKCnBsb3QyMDEzIDwtIGdncGxvdChoaWxvMjAxMywgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoY21zKSkpICsgCiAgZ2VvbV9saW5lKGNvbG9yPSJibGFjayIpKwogIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoc2FsdHBwdCkpLCBjb2xvciA9ICJkYXJrcmVkIikgKwogIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoQ29yci5OVFUpKSwgY29sb3I9ImRhcmtncmVlbiIpICsKICBnZW9tX2xpbmUoYWVzKHk9YXMubnVtZXJpYyhDaGxSRlUpKSxjb2xvcj0iYmx1ZSIpCgpwcmludChwbG90MjAxMyArIGdndGl0bGUoIjIwMTMiKStsYWJzKHg9IlRpbWUiLCB5ID0gIlJpdmVyIEZsb3cgLSBjdWJpYyBtZXRlcnMgcGVyIHNlY29uZCIpKQpgYGAKCiMjIyMgU3BsaXQgMjAxMyBpbnRvIDYgbW9udGhzIHRvIGdldCBhIGJldHRlciB2aXN1YWwKYGBge3J9CiMgUjIwMTMuMSA8LSBnZ3Bsb3QoaGlsbzIwMTNbMToobGVuZ3RoKGhpbG8yMDEzWywxXSkvMiksXSwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoY21zKSkpICsgCiMgICBnZW9tX2xpbmUoY29sb3I9ImJsYWNrIikrCiMgICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKHNhbHRwcHQpKSwgY29sb3IgPSAiZGFya3JlZCIpICsKIyAgIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoQ29yci5OVFUpKSwgY29sb3I9ImRhcmtncmVlbiIpICsKIyAgIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJibHVlIikKIyBwcmludChSMjAxMy4xICsgZ2d0aXRsZSgiUml2ZXIgRmxvdyIpK2xhYnMoeD0iVGltZSIsIHkgPSAiUml2ZXIgRmxvdyAtIGN1YmljIG1ldGVycyBwZXIgc2Vjb25kIikpCiMgUjIwMTMuMSt5bGltKDAsNDApCiMgCiMgCiMgUjIwMTMuMiA8LSBnZ3Bsb3QoaGlsbzIwMTNbKGxlbmd0aChoaWxvMjAxM1ssMV0pLzIpOmxlbmd0aChoaWxvMjAxM1ssMV0pLF0sICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGNtcykpKSArIAojICAgZ2VvbV9saW5lKGNvbG9yPSJibGFjayIpKwojICAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhzYWx0cHB0KSksIGNvbG9yID0gImRhcmtyZWQiKSArCiMgICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKENvcnIuTlRVKSksIGNvbG9yPSJkYXJrZ3JlZW4iKSArCiMgICBnZW9tX2xpbmUoYWVzKHk9YXMubnVtZXJpYyhDaGxSRlUpKSxjb2xvcj0iYmx1ZSIpCiMgcHJpbnQoUjIwMTMuMiArIGdndGl0bGUoIlJpdmVyIEZsb3ciKStsYWJzKHg9IlRpbWUiLCB5ID0gIlJpdmVyIEZsb3cgLSBjdWJpYyBtZXRlcnMgcGVyIHNlY29uZCIpKQojIFIyMDEzLjIreWxpbSgwLDQwKQpgYGAKCiMgMjAxNCBEYXRhICYgUGxvdApgYGB7cn0KIyBNYXggcml2ZXIgZmxvdyBpbiB0aGUgb3ZlcmFsbCBkYXRhIHNldAptYXgoYXMubnVtZXJpYyhoaWxvMjAxNCRjbXMpKQptYXgoYXMubnVtZXJpYyhoaWxvbW9kaWZpZWQkY21zKSkKCndoaWNoKGFzLm51bWVyaWMoaGlsbzIwMTQkY21zKSA9PSBtYXgoYXMubnVtZXJpYyhoaWxvMjAxNCRjbXMpKSkKCmhpbG8yMDE0WzUyNjMsXQoKUjIwMTQgPC0gZ2dwbG90KGhpbG8yMDE0LCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhsb2djbXMpKSkgKyAKICBnZW9tX2xpbmUoY29sb3I9ImJsYWNrIikrCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhzYWx0cHB0KSksIGNvbG9yID0gImRhcmtyZWQiKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpLCBjb2xvcj0iZGFya2dyZWVuIikgKwogIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJibHVlIikKCnByaW50KFIyMDE0ICsgZ2d0aXRsZSgiMjAxNCIpK2xhYnMoeD0iVGltZSIsIHkgPSAiUml2ZXIgRmxvdyAtIGN1YmljIG1ldGVycyBwZXIgc2Vjb25kIikpCmBgYAoKCiMgMjAxNSBEYXRhICYgUGxvdApgYGB7cn0KbWF4KGFzLm51bWVyaWMoaGlsbzIwMTUkY21zKSkKCndoaWNoKGFzLm51bWVyaWMoaGlsbzIwMTUkY21zKSA9PSBtYXgoYXMubnVtZXJpYyhoaWxvMjAxNSRjbXMpKSkKCmhpbG8yMDE1WzY0NzUsXQoKUjIwMTUgPC0gZ2dwbG90KGhpbG8yMDE1LCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhsb2djbXMpKSkgKyAKICBnZW9tX2xpbmUoY29sb3I9ImJsYWNrIikrCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhzYWx0cHB0KSksIGNvbG9yID0gImRhcmtyZWQiKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpLCBjb2xvcj0iZGFya2dyZWVuIikgKwogIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJibHVlIikKCnByaW50KFIyMDE1ICsgZ2d0aXRsZSgiMjAxNSIpK2xhYnMoeD0iVGltZSIsIHkgPSAiUml2ZXIgRmxvdyAtIGN1YmljIG1ldGVycyBwZXIgc2Vjb25kIikpCmBgYAoKCiMgU2VwYXJhdGluZyB0aGUgRGF0YSBieSBTdG9ybSBFdmVudHMKPT09PT09PQojIFNlcGFyYXRpbmcgdGhlIERhdGEgYnkgU3Rvcm0KCmBgYHtyfQpvdXRjb21lcyA8LSBhcy5udW1lcmljKGhpbG9tb2RpZmllZCRzYWx0cHB0KTwyNSAKaW5kZXgubHQyNSA8LSB3aGljaChvdXRjb21lcz09VFJVRSkKCnBvc3Muc3Rvcm1zIDwtIGhpbG9tb2RpZmllZFtpbmRleC5sdDI1LF0KcG9zcy5zdG9ybXMKYGBgCgoKYGBge3J9Cm91dGNvbWVzLjM1IDwtIGFzLm51bWVyaWMoaGlsb21vZGlmaWVkJHNhbHRwcHQpPDM1IAppbmRleC5sdDM1IDwtIHdoaWNoKG91dGNvbWVzPT1UUlVFKQppbmRleC5sdDI1CnBvc3Muc3Rvcm1zMzUgPC0gaGlsb21vZGlmaWVkW2luZGV4Lmx0MjUsXQpwb3NzLnN0b3JtczM1CgpoaWxvbW9kaWZpZWQkZGF0ZVsxNl0KYGBgCgpgYGB7cn0Kc3Rvcm0uMS43LjEzIDwtIGdncGxvdChoaWxvbW9kaWZpZWRbMTQ1OjE2OCxdLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhjbXMpKSkgKyAKICBnZW9tX2xpbmUoY29sb3I9ImJsYWNrIikrCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhzYWx0cHB0KSksIGNvbG9yID0gImxpZ2h0c3RlZWxibHVlMSIpICsKICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKENvcnIuTlRVKSksIGNvbG9yPSJncmV5NjkiKSArCiAgZ2VvbV9saW5lKGFlcyh5PWFzLm51bWVyaWMoQ2hsUkZVKSksY29sb3I9ImtoYWtpIikKCnByaW50KHN0b3JtLjEuNy4xMyArIGdndGl0bGUoIlN0b3JtIDEvNy8xMyIpK2xhYnMoeD0iVGltZSIpKQpgYGAKCiMgVHJ5aW5nIHRvIG1ha2UgdGhlIFJhaW5mYWxsIHBsb3QgZWFzaWVyIHRvIHJlYWQKCmBgYHtyfQpSaXZlckZsb3cxIDwtIGdncGxvdChoaWxvbW9kaWZpZWRbMToxMDAsXSwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoY21zKSkpICsgCiAgZ2VvbV9saW5lKCkKCnByaW50KFJpdmVyRmxvdyArIGdndGl0bGUoIlJpdmVyIEZsb3ciKStsYWJzKHg9IlRpbWUiLCB5ID0gIlJpdmVyIEZsb3cgLSBjdWJpYyBtZXRlcnMgcGVyIHNlY29uZCIpKQpgYGAKPT09PT09PQpgYGB7cn0KZ2V0d2QoKQojIHdyaXRlLmNzdihoaWxvbW9kaWZpZWQsZmlsZT0iSGlsb0JheU5FVzEzdG8xNS5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKCmBgYAoKIyBORVcgQ2hhbmdlIGluIFJpdmVyIEZsb3cgQ29sdW1uIAoKYGBge3J9CiMgYW55IHZhbHVlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxMCBjbXMgaW5kaWNhdGVzIGEgc3Rvcm0KcG9zLm5lZyA8LSBhcy5udW1lcmljKGhpbG9tb2RpZmllZCRjbXMpIC0gMTAgCgpzdGFydCA8LSB2ZWN0b3IoKQplbmQgPC0gdmVjdG9yKCkKCmZvcihpIGluIDE6bGVuZ3RoKHBvcy5uZWcpKXsKICBpZihpc1RSVUUocG9zLm5lZ1tpXSA8IDAgJiYgcG9zLm5lZ1tpKzFdID4gMCkpeyAKICAgICMgaWYgZ29lcyBmcm9tICsgdG8gLSB0aGVuIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiBhIHN0b3JtCiAgICBzdGFydFtpXSA8LSBpCiAgfWVsc2UgaWYoaXNUUlVFKHBvcy5uZWdbaV0gPiAwICYmIHBvcy5uZWdbaSsxXSA8IDApKXsKICAgICMgaWYgZ29lcyBmcm9tIC0gdG8gKyB0aGVuIHRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgc3Rvcm0KICAgIGVuZFtpXSA8LSBpCiAgICB9Cn0Kc3RhcnQ8LXN0YXJ0WyFpcy5uYShzdGFydCldICMgcmVtb3ZpbmcgTkEKc3RhcnQKbGVuZ3RoKHN0YXJ0KSAjIG1ha2Ugc3VyZSBib3RoIHN0YXJ0IGFuZCBlbmQgYXJlIHRoZSBzYW1lIGxlbmd0aCAKCmVuZDwtZW5kWyFpcy5uYShlbmQpXQplbmQKbGVuZ3RoKGVuZCkKYGBgCgoKYGBge3J9CmZvcihpIGluIDE6bGVuZ3RoKHN0YXJ0KSl7CiAgc3Rvcm0gPC0gZ2dwbG90KGhpbG9tb2RpZmllZFsoc3RhcnRbaV0tMjQpOihlbmRbaV0rMjQpLF0sICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGNtcykpKSArCiAgZ2VvbV9saW5lKGNvbG9yPSJibGFjayIpKwogIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoQ29yci5OVFUpKSwgY29sb3I9ImdyZWVuIikgKwogIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJibHVlIikgKwogIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoc2FsdHBwdCkpLGNvbG9yPSJyZWQiKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhUZW1wQykpLGNvbG9yPSJwdXJwbGUiKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhEb3BlcikpLGNvbG9yPSJvcmFuZ2UiKQoKICBwcmludChzdG9ybSArIGdndGl0bGUoIlN0b3JtcyIpK2xhYnMoeD0iVGltZSIpKQp9CgpgYGAKIApgYGB7cn0KQ2hhbmdlUkYgPC0gZnVuY3Rpb24oeCA9IHZlY3RvcigpKXsKY2hhbmdlIDwtIGMoMCkKICBmb3IoaSBpbiAxOihsZW5ndGgoeCktMSkpewogICAgY2hhbmdlW2krMV0gPC0geFtpXS14W2krMV0KICB9CiAgcmV0dXJuKGNoYW5nZSkKfQpjaGFuZ2UudmVjdG9yIDwtIGMoQ2hhbmdlUkYoYXMubnVtZXJpYyhoaWxvbW9kaWZpZWQkY21zKSkpCmNoYW5nZS52ZWN0b3IKbGVuZ3RoKENoYW5nZVJGKGFzLm51bWVyaWMoaGlsb21vZGlmaWVkJGNtcykpKQpsZW5ndGgoaGlsb21vZGlmaWVkJGNtcykgIyBzYW1lIGxlbmd0aAoKaGlsb21vZGlmaWVkJGNoYW5nZUNNUyA8LSBjaGFuZ2UudmVjdG9yCgpoZWFkKGhpbG9tb2RpZmllZCkKYGBgCgpgYGB7cn0KIyAxMC0xMSBuZWdhdGl2ZSBzdGFydCBvZiBzdG9ybQojIDExLTEwIHBvc2l0aXZlIGVuZCBvZiBzdG9ybQoKcG9zaXRpdmUuY2hhbmdlIDwtIHZlY3RvcigpCm5lZ2F0aXZlLmNoYW5nZSA8LSB2ZWN0b3IoKQppbmRleCA8LSB2ZWN0b3IoKQoKCmZvcihpIGluIDE6bGVuZ3RoKGhpbG9tb2RpZmllZCRjbXMpKXsKICBpZiAoaGlsb21vZGlmaWVkJGNoYW5nZUNNU1tpXSA8IDAgKXsKICAgIG5lZ2F0aXZlLmNoYW5nZVtpXSA8LSBpCiAgfWVsc2V7CiAgICBpZihoaWxvbW9kaWZpZWQkY2hhbmdlQ01TW2ldID4gMCl7CiAgICAgIHBvc3RpdmUuY2hhbmdlW2ldIDwtIGkKICAgIH0KICB9CiAgaWYoaGlsb21vZGlmaWVkJGNtc1tpXSA+PSAxMCApewogICAgaW5kZXhbaV0gPC0gaQogIH0KfQppbmRleApwb3NpdGl2ZS5jaGFuZ2UKbmVnYXRpdmUuY2hhbmdlCmxlbmd0aCh3aGljaChpbmRleCA+IDApKSAKCnN0b3JtcyA8LSBzb3J0KGMocG9zaXRpdmUuY2hhbmdlLG5lZ2F0aXZlLmNoYW5nZSksIGRlY3JlYXNpbmcgPSBGQUxTRSkKc3Rvcm1zCmhpbG9zdG9ybXMgPC0gaGlsb21vZGlmaWVkW3N0b3JtcyxdCmhpbG9zdG9ybXMKYGBgCgpgYGB7cn0Kc3Rvcm0gPC0gZ2dwbG90KGhpbG9zdG9ybXNbNTA6MjUwLF0sICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGNtcykpKSArCiAgZ2VvbV9saW5lKGNvbG9yPSJibGFjayIpKwogIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoQ29yci5OVFUpKSwgY29sb3I9ImdyZXk2OSIpICsKICBnZW9tX2xpbmUoYWVzKHk9YXMubnVtZXJpYyhDaGxSRlUpKSxjb2xvcj0ia2hha2kiKQoKcHJpbnQoc3Rvcm0gKyBnZ3RpdGxlKCJTdG9ybSAxLzcvMTMiKStsYWJzKHg9IlRpbWUiKSkKYGBgCgpgYGB7cn0KCnZlY3RvciA8LSB2ZWN0b3IoKQpmb3IoaSBpbiAxOmxlbmd0aChzdG9ybXMpKXsKICBpZihpc1RSVUUoYWJzKHN0b3Jtc1tpXS1zdG9ybXNbaSsxXSkgPiAxMCkpewogICAgc3RvcCA8LSBzdG9ybXNbaV0KICB9ZWxzZXsKICAgIHN0b3AgPC0gMAogIH0KICBpZihzdG9wID4gMCl7CiAgICB2ZWN0b3JbaV0gPC0gc3RvcAogIH0KfQp2ZWN0b3Jbd2hpY2goaXMubmEodmVjdG9yKT09RkFMU0UpXQoKc3Rvcm0uMS43LjEzIDwtIGdncGxvdChoaWxvbW9kaWZpZWRbMTo4MCxdLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhjbXMpKSkgKwogIGdlb21fbGluZShjb2xvcj0iYmxhY2siKSsKICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKHNhbHRwcHQpKSwgY29sb3IgPSAibGlnaHRzdGVlbGJsdWUxIikgKwogIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoQ29yci5OVFUpKSwgY29sb3I9ImdyZXk2OSIpICsKICBnZW9tX2xpbmUoYWVzKHk9YXMubnVtZXJpYyhDaGxSRlUpKSxjb2xvcj0ia2hha2kiKQoKcHJpbnQoc3Rvcm0uMS43LjEzICsgZ2d0aXRsZSgiU3Rvcm0gMS83LzEzIikrbGFicyh4PSJUaW1lIikpCmBgYAoKYGBge3J9CnN0YXJ0YXhpcyA8LSB2ZWN0b3IoKQplbmRheGlzIDwtIHZlY3RvcigpCmkgPC0gMQp3aGlsZSAoaSA8PSBsZW5ndGgoY2hhbmdlLnZlY3RvcikpIHsKICBpZihpc1RSVUUoY2hhbmdlLnZlY3RvcltpXSA8IDApKXsKICAgIHN0YXJ0YXhpc1tpXSA8LSBSaXZlckZsb3dbaV0KICB9CiAgaSA8LSBpKzEKfQpiZWdpbjwtd2hpY2goaXMubmEoc3RhcnRheGlzKSA9PSBGQUxTRSkKYmVnaW4KCndoaWxlIChpIDw9IGxlbmd0aChjaGFuZ2UudmVjdG9yKSkgewogIGlmKGlzVFJVRShjaGFuZ2UudmVjdG9yW2ldID4gMCkpewogICAgZW5kYXhpc1tpXSA8LSBSaXZlckZsb3dbaV0KICB9CiAgaSA8LSBpKzEKfQplbmQgPC0gd2hpY2goaXMubmEoZW5kYXhpcyk9PUZBTFNFKQoKCnN0b3JtLjEuNy4xMyA8LSBnZ3Bsb3QoaGlsb21vZGlmaWVkW2JlZ2luLF0sICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGNtcykpKSArIAogIGdlb21fbGluZShjb2xvcj0iYmxhY2siKSsKICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKENvcnIuTlRVKSksIGNvbG9yPSJncmV5NjkiKSArCiAgZ2VvbV9saW5lKGFlcyh5PWFzLm51bWVyaWMoQ2hsUkZVKSksY29sb3I9ImtoYWtpIikKCnByaW50KHN0b3JtLjEuNy4xMyArIGdndGl0bGUoIlN0b3JtIDEvNy8xMyIpK2xhYnMoeD0iVGltZSIpKQoKYGBgCgpgYGB7cn0Kd2hpbGUgKGkgPD0gbGVuZ3RoKGNoYW5nZS52ZWN0b3IpKSB7CiAgaWYoaXNUUlVFKGNoYW5nZS52ZWN0b3JbaV0gPCAwKSl7CiAgICBzdGFydGF4aXNbaV0gPC0gUml2ZXJGbG93W2ldCiAgICBpIDwtIGkrMQogIH1lbHNlewogICAgaWYoaXNUUlVFKGNoYW5nZS52ZWN0b3JbaV0gPiAwKSl7CiAgICAgIGVuZGF4aXNbaV0gPC0gUml2ZXJGbG93W2ldCiAgICB9CiAgfQp9CmBgYAoK